精华内容
下载资源
问答
  • Linux-C C语言编译过程

    千次阅读 2018-07-18 20:32:55
    Linux-C C语言编译过程 一、简述  GCC(GNU Compiler Collection,即 GNU 编译器套装),是一套由 GNU 开发的编程 语言编译器。简单介绍使用gcc编译器将hello.c文件编译成为hello可执行文件的过程。 在伪...

    Linux-C C语言编译过程

    一、简述

        GCC(GNU Compiler Collection,即 GNU 编译器套装),是一套由 GNU  开发的编程 语言编译器。简单介绍使用gcc编译器将hello.c文件编译成为hello可执行文件的过程。

    在伪终端下输入如下命令

    Liang@ubuntu:~$ gcc hello.c -o hello           (这个命令包括了编译的四个阶段:预处理、编译、汇编、链接)

    含义:用 gcc 这个工具编译 hello.c,并生成一个二进制文件 hello。 其中 –o 的意义是 output,指明要生成的文件的名称,如果不写 –o hello ,默认生成  a.out 文件(Linux下.out后缀的是可执行文件,相当于windows下的.exe文件)。完成了从 C 源程序到 ELF 格式(Linux 系统下的可执行文件的格式)的全部步骤,生成的文件 hello是一个可以直接运行的二进制文件。

     

     

    二、编译过程

    1、预处理

               GCC 在第一个阶段会调用预处理器 cpp 来对 C 源程序进行预处理,预处理就是 解释源程序当中的所有的预处理指令,如#include(文件包含)、#define(宏定义)、#if(条件编译) 等以井号’#’开头的 语句就是预处理指令。这些预处理指令将会在预处理阶段被解释掉,比如会把文件包含语句所指定 的文件拷贝进来,覆盖掉原来的#include 语句,所有的宏定义被展开,所有的条件编译语句将被执行等。除了处理这些预处理指令之外,GCC 还会把程序当中的注 释删除,另外添加必要的调试信息。

              使用预处理命令:gcc hello -o hello.i -E 来获得预处理后的文件。

    2、编译

             将经过预处理之后生成的.i 文件进一步的翻译,它包括词法和语法的分析, 最终生成对应硬件平台的汇编语言,具体生成什么平台 的汇编文件取决于所采用的编译器,如果用的是 GCC,那么将会生成 x86 格式的汇编文件,如果用的是针对 ARM 平台的交叉编译器,那么将会生成 ARM 格式的汇编文件。

               使用命令: gcc hello.i -o hello.s -S 获得 C 源程序经过预处理和编译之后的汇编程序。

    3、汇编

                编译器 gcc 调用汇编器 as 将汇编源程序翻译成 为可重定位文件。汇编指令跟处理器直接运行的二进制指令流之间基本是一一对应的关系, 该阶段只将.s 文件里面的汇编翻译成相应的指令。

             使用命令:gcc hello.s -o hello.o -c  获得汇编后的文件。

           生成的.o 文件是一个 ELF 格式的可重定位(relocatable)文件,所谓的可重定位,指的是该文件虽 然已经包含可以让处理器直接运行的指令流,但是程序中的所有的全局符号尚未定位,所谓 的全局符号,就是指函数和全局变量,函数和全局变量默认情况下是可以被外部文件引用的, 由于定义和调用可以出现在不同的文件当中,因此他们在编译的过程中需要确定其入口地 址,比如 a.c 文件里面定义了一个函数 func( ),b.c 文件里面调用了该函数,那么在完成第 三阶段汇编之后,b.o 文件里面的函数 func( )的地址将是 0,显然这是不能运行的,必须要 找到 a.c 文件里面函数 func( )的确切的入口地址,然后将 b.c 中的“全局符号”func 重新定 位为这个地址,程序才能正确运行。因此,接下来需要进行第四个阶段:链接、链接到其他文件。

    4、链接

            链接系统的标准 C 库、gcc 内置库等基本库文件。

    使用命令:gcc hello.o -o hello -lc -lgcc  链接生成可执行文件,-lc 和-lgcc 是默认的,可以省略。

            链接还会合并相同权限的段(section)。一个可执行镜像文件可以由多个可重定位文件链接而成,比如 a.o,b.o,c.o 这三个可重定位文件链接生成一个叫 做 x 的可执行文件( ELF 格式)ELF 格式是符合一定规范的文件格式,里面包含很多段(section),其中.text 段存放了运行代码,.data 段里面存放了已经初始化了的全局变量和静态局部变量,.rodata 段存放了程序中所有的常量等等,除了这些程序运行时需要用得到的代码和数据之外,还有一些是程序在 从磁盘加载到内存时需要提供给加载器的辅助信息,比如提供代码重定位信息的.rel.text 段, ELF 格式文件中的符号表.symtab 段等,这些信息将会在程序加载完毕之后被丢弃,而不会 存在于程序运行的内存当中。将多个不同的可重定位 ELF 格式文件链接成一个可执行 ELF 格式文件的过程中,会将它们不同的各个段按照“执行视图”合并起来,简言之,就是将具有相同权限的段合并到一起,比如各个文件中的具有只读权限的.text 段和.rodata 段将会被合并到一起,当程序有多个执行实例(多个进程)时,这些 执行实例会共享一个只读段的副本,从而节省内存空 间。

                         

    三、总结

         objdump是linux下一款反汇编工具,能够反汇编目标文件、可执行文件。比如反汇编hello可执行文件:(部分截图)

                  

    命令选项

    --archive-headers 
    -a 
    显示档案库的成员信息,类似ls -l将lib*.a的信息列出。 
    
    -b bfdname 
    --target=bfdname 
    指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如: 
    
    objdump -b oasys -m vax -h hello.o 
    显示hello.o的头部摘要信息,明确指出该文件是Linux系统下用gcc编译器生成的目标文件。objdump -i将给出这里可以指定的目标码格式列表。 
    
    -C 
    --demangle 
    将底层的符号名解码成用户级名字,除了去掉所开头的下划线之外,还使得C++函数名以可理解的方式显示出来。 
    
    --debugging 
    -g 
    显示调试信息。企图解析保存在文件中的调试信息并以C语言的语法显示出来。仅仅支持某些类型的调试信息。有些其他的格式被readelf -w支持。 
    
    -e 
    --debugging-tags 
    类似-g选项,但是生成的信息是和ctags工具相兼容的格式。 
    
    --disassemble 
    -d 
    从objfile中反汇编那些特定指令机器码的section。 
    
    -D 
    --disassemble-all 
    与 -d 类似,但反汇编所有section. 
    
    --prefix-addresses 
    反汇编的时候,显示每一行的完整地址。这是一种比较老的反汇编格式。 
    
    -EB 
    -EL 
    --endian={big|little} 
    指定目标文件的小端。这个项将影响反汇编出来的指令。在反汇编的文件没描述小端信息的时候用。例如S-records. 
    
    -f 
    --file-headers 
    显示objfile中每个文件的整体头部摘要信息。 
    
    -h 
    --section-headers 
    --headers 
    显示目标文件各个section的头部摘要信息。 
    
    -H 
    --help 
    简短的帮助信息。 
    
    -i 
    --info 
    显示对于 -b 或者 -m 选项可用的架构和目标格式列表。 
    
    -j name
    --section=name 
    仅仅显示指定名称为name的section的信息 
    
    -l
    --line-numbers 
    用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。 
    
    -m machine 
    --architecture=machine 
    指定反汇编目标文件时使用的架构,当待反汇编文件本身没描述架构信息的时候(比如S-records),这个选项很有用。可以用-i选项列出这里能够指定的架构. 
    
    --reloc 
    -r 
    显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来。 
    
    --dynamic-reloc 
    -R 
    显示文件的动态重定位入口,仅仅对于动态目标文件意义,比如某些共享库。 
    
    -s 
    --full-contents 
    显示指定section的完整内容。默认所有的非空section都会被显示。 
    
    -S 
    --source 
    尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。 
    
    --show-raw-insn 
    反汇编的时候,显示每条汇编指令对应的机器码,如不指定--prefix-addresses,这将是缺省选项。 
    
    --no-show-raw-insn 
    反汇编时,不显示汇编指令的机器码,如不指定--prefix-addresses,这将是缺省选项。 
    
    --start-address=address 
    从指定地址开始显示数据,该选项影响-d、-r和-s选项的输出。 
    
    --stop-address=address 
    显示数据直到指定地址为止,该项影响-d、-r和-s选项的输出。 
    
    -t 
    --syms 
    显示文件的符号表入口。类似于nm -s提供的信息 
    
    -T 
    --dynamic-syms 
    显示文件的动态符号表入口,仅仅对动态目标文件意义,比如某些共享库。它显示的信息类似于 nm -D|--dynamic 显示的信息。 
    
    -V 
    --version 
    版本信息 
    
    --all-headers 
    -x 
    显示所可用的头信息,包括符号表、重定位入口。-x 等价于-a -f -h -r -t 同时指定。 
    
    -z 
    --disassemble-zeroes 
    一般反汇编输出将省略大块的零,该选项使得这些零块也被反汇编。 

     

    展开全文
  • C语言

    万次阅读 多人点赞 2019-12-18 23:01:50
    C语言 42.C语言是一种计算机高级语言。 43.C语言允许直接访问物理地址,能进行位操作。 44.C语言是结构化程序设计语言 45.c程序要通过编译,连接才能得到可执行的目标程序 46.用c语言编写程序,可以编写出任何类型的...

    公共考点
    1.算法的空间复杂度是指算法在执行过程中所需要的内存空间。
    2.算法的时间复杂度是指算法所需要的计算工作量。
    3.数据的逻辑结构与储存结构不是一一对应的。
    4.队列的修改是以先进先出的原则进行的。–与队列结构有关联的是先到先服务的作业调度。
    5.循环队列中的元素个数随队头指针和队尾指针变化而动态变化。
    6.C语言中的result只是一个自己定义的量
    7.对空和队满时,头尾指针均相等。
    8.冒泡法是在扫描过程中逐次比较相邻两个元素的大小。例:9+8+7+6+5+4+3+2+1=45.
    9.对象间的信息传递靠消息。
    10.多态性是指同一个操作可以是不同对象的行为。操作—对象。

    C语言
    1.源程序的扩展名为.c,目标程序的扩展名为.obj,可执行程序的扩展名为.exe(每个后缀为.c的C语言都可以单独进行编译)(C语言编译程序把.c编译成.obj的二进制文件)(链接形成.exe文件)
    2.循环结构、选择结构,顺序结构都是结构化程序的基本结构。
    3.N-S流程图是复杂算法的描述手段。
    4.长方形为处理框。椭圆形为连接点。
    5.一个c语言只能有一个主函数。
    6.函数的定义不可以嵌套,函数的调用可以嵌套。
    7.C语言总是以main函数开始执行。
    8.常量的类型:整型常量、实型常量、字符常量、字符串常量、符号常量。
    9.十进制整型常量:基本数字范围:0-9;(十进制小数两边必须有数字)
    八进制整型常量:以0开头,输出格式控制符为%o,基本数字范围0-7;
    十六进制整型常量:以0x开头,输出格式为%x,基本数字范围为0-15写为A-F或a-f;
    指数形式:e前必须有数字,e后必须为整数。
    10. 关键字属于标识符。(关键字不能做变量名也不能做函数名)
    11.数值型常量有整型常量、实型常量但均有正负值之分。
    12.语言的预编译处理可以可以用符号名代表一个常量定义是不必指定常量类型。
    13.实型常量又称实数或浮点数。在C语言中可以用单精度型和双精度型两种形式表示实型常量,分别用类型名float和double进行定义。实型常量在一般的微型集中占用4个字节,一般形式或者指数形式,数值范围都是-1038~1038,有效数字是7位。(不能是整形数据,如0)(常量的类型可以从字面上区分)(1为整型常量)(1.0为实型常量)(a为字符型常量)
    14.\0为八进制数,所以\09是错误的。
    15.字符常量在内存中占1个字节,字符常量可以进行关系运算。不能参与数值运算,可以参与任何整数运算。
    16.不能用字符串常量对字符数组名进行整体赋值操作。
    17.可以使用字符串常量来给一维数组进行复制。
    18.关于字节大小的问题

    16位编译器:char 1个字节  char* 2个字节 int 2个字节 float 4个字节 double 8个字节
    32位编译器:char 1个字节  char* 2个字节 int 4个字节 float 4个字节 double 8个字节
    64位编译器:char 1个字节  char* 2个字节 int 4个字节 float 4个字节 double 8个字节
    

    19.10进制转8进制,手算用 除8取余数法得
    20.十进制转十六进制为:除十六取余直到商为0,余数从后往前读。
    21.%f代表单精度浮点型数据(float),%lf代表双精度浮点型数(double)。
    单精度浮点数有效数字保证6位,部分7位,双精度浮点数有效数字保证15位,部分16位。
    22.sizeof可以看成是一个无符号整型表达式(sizeof为字节运算符)
    23.强制运算符:(类型名)(表达式) 逗号运算符:, 条件运算符::? :
    24. 赋值运算符左边必须是(一个)变量。
    25.a=bc,先运算bc,这个表达式的含义是,若b与c相等,那么得出的值为1,若不等则为0.
    26.“^” 按位异或 两数的二进制对应位相同,则为0,不同则为1.
    27.“|” 按位或 两个二进制中只要有一个为1,则结果为1。
    28.“~” 按位取反 二进制 0变1,1变0.
    29. “&”按位与 两个二进制都为1,则该位的结果为1,否则为零
    【 零的按位取反是 -1(0在数学界既不是正数也不是负数)
    所有正整数的按位取反是其本身+1的负数
    所有负整数的按位取反是其本身+1的绝对值 】
    30.位运算的对象只能是整形或字符型数据
    31.||逻辑或 前后条件只要有一个满足则为真。
    32.&&逻辑与 前后条件同时满足表达式为真。
    33.再用||的地方一般可以用|代替,但是用|的地方不能用||代替。
    34.“&”取地址运算
    35“”指针运算符
    36.p是指针变量,则&p是变量p的地址
    37.p是指针变量,则
    p是变量p所指向地址的值
    38.基类型不同的指针变量不可以相互混用
    39.函数的类型可以是指针类型
    40.函数的参数可以是整型、实型、字符型、指针类型。
    41.在这里插入图片描述

    42.C语言是一种计算机高级语言。
    43.C语言允许直接访问物理地址,能进行位操作。
    44.C语言是结构化程序设计语言
    45.c程序要通过编译,连接才能得到可执行的目标程序
    46.用c语言编写程序,可以编写出任何类型的程序
    47.C语言允许有空函数
    48.C程序书写格式,允许一行内可以写几个语句
    49.C程序的语句无行号(C语言中给源程序加行号;行号是用来定位代码的,指文件在几行)
    50.C语言的每个语句的最后必须有一个分号
    51.C语言本身没有输入输出语句(没有特定的输入输出语句)
    52.C语言可用来编写应用软件,也可用来编写系软件
    53.TurboC是在微机上广泛使用的编译程序
    54.C语言的数据结构是以数据类型形式出现的(不是常量和变量)
    55.空类型是C语言的一种数据类型
    56.C语言中数据有常量和变量之分
    57.利用指针和结构体类型可以构成表、树等复杂的数据结构
    58.在C程序中对所用到的所有数据都必须指定其数据类型
    59.c程序运行过程中,其值不能被改变的量称为常量
    60.在程序运行过程中,其值可以改变的量称为变量
    61.C语言可以用一个标识符代表一个常量,称为符号常量
    62.C语言规定标识符只能由字母、数字和下划线三种字符组成
    63.C语言整型常量可用十进制整数、八进整数和十六进制整数三种形式表示
    64.在现微机上使用的C编译系统,每一个整型变量在内存中占2个字节
    65.整型变量的基本类型符为int
    66.在微机上,一个长整型变量在内存中占4个字节(float型变量在内存中占4个字节)
    67.一个int型变量的最大允许值为32767
    68.在一个整常量后面加一个字母“L”或“1”.则认为该常量是longint 型常量
    69.C语言实型常量可用二进制小数和指数二种形式表示
    70.C语言实型变量分为:float型、double型、long double型三类
    71.C语言doule型一个变量的数值有效数字是16位
    72.C语言的字符常量是用单引号括起来的一个字符
    73.C语言的转义字符是以一个“\”开头的一种特殊形式的字符常量
    74.C语言中换行符使用’\n’,这是一个转义字符
    75.转文字符\r的含义是回车。
    76.C语言的字符型变量只能存放一个字符
    77.C语言允许字符数据与整数直接进行算术运算
    78.C语言允许在定义变量的同时使变量初始化
    79.C语言允许整型、实型、字符型数据间可以混合运算
    80.C语言规定两个整数相除的结果为整数
    81.用求余运算符“%”作运算,运算符两侧均应为整型数据
    82.用算术运算符和括号将运算对象按C语法规则组成的式子,称为C算术表达式
    83.算术运算符的结合方向为“自左至右”
    84.强制类型转换时,原来变量的类型未发生变化
    85.自增、自减运算符的结合方向为“自右至左”
    86.自增运算符只能用于变量,不能用于常量或表达式
    87指针.自增(减)运算符也可以用于指针变量,使指向下一个地址
    88.运算符“=”的作用是将一个数据赋给一个变量
    89.运算符“”的作用是将两侧数据是否相等
    90.赋运算符的结合方向是“自右向左”
    91.凡是二目运算符,都可以与赋值运算符一起组合成复合赋值运算符
    92.运算符“
    ”的作用是将一个数据赋给一个变量
    93.C语言不允许将实型数据赋给整型变量
    94.一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式
    95.一个C程序可以由若干个源程序文件组成
    96.一个源文件可以由若千个函数和预处理命令以及全局变量声明部分组成
    97.空语句是C语言的一种语句
    98.复合语句中最后一个语句中最后的分号不能省略不写
    99.putchar函数的作用是向终端输出一个字符
    100.getchar函数的作用是从终端输入一个字符
    101.格式输出函数(print)一次可以输出多个数据
    102.printf函数的%ld格式参数,用来输入出长整型数据
    103.printf函数的%o格式参数,用来以8进制数形式输出整数
    104.printf函数的%f格式参数,用来以小数形式输出实数
    105.printf函数的%x格式参数,可以输出指定参数的16进制形式
    106.printf函数的%s格式参数,用来输出一个字符串
    107.C语言不是面向对象的程序设计语言
    108.printf函数的%e格式参数,以指数形式输出实数
    109.C语言单精度数的有效数一般为7位
    110.printf函数的%g格式参数
    111.%g是C语言printf()函数的一个输出格式类型,它表示以%f%e中较短的输出宽度输出单、双精度实数,在指数小于-4或者大于等于精度时使用%e格式
    112.p++是指下一个地址。
    (p)++是指将p所指的数据的值加一。
    C编译器认为
    和++是同优先级操作符,且都是从右至左结合的,所以p++中的++只作用在p上,和(p++)意思一样;在(p)++中,由于()的优先级比和++都高,所以++作用在()内的表达式*p上。比如有:
    int x,y,a[]={1,2,3,4,5},*p=a,*q=a;
    x=*p++;//执行这一句后x=a[0]=1,p=a+1
    y=(*q)++;//执行这一句后,y=a[0]+1=2,q仍然=a
    113. printf函数的附加格式说明字符“m”的含义是指输出数据的最小宽度
    114.scanf函数中的“格式控制”后面应当是变量地址(不是变量符)
    115.逻辑运算符>算术运算符>关系运算符>条件运算符>赋值运算符(罗算管调幅)
    116.条件运算符的结合方向是“自右向左"
    117.if语中又包含文可以转在电百度网点电 平句的嵌套
    118.条件运算符要求有3个操作对象,称为三目运算符
    119.条件表达式中三个表达式的类型可以不同
    120.switch语句是多分支选择语句
    121.switch语句中每一个case的常量表达式的值必须互不相同
    122.switch语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行
    123.switch语句中多个case可以共用组执行语句
    124.goto语句为无条件转向语句
    125.C语句的循环语句中循环体如果包含一个以上的语句,必须以复合语句形式出现bre
    126.for循环语句中的3个表达式都可以省略
    127.C语句的一个循环体内允许又包含另一个完整的循环结构
    128.break语句不能用于循环语句和switch语句之外的任何其它语句中
    129.continue语句的作用是结束本次循环(而不是终止整个循环)
    130.C数组中的每一个元素都必须属于同一个数据类型
    131.C数组必须先定义,然后使用
    132.C语言规定只能逐个引用数组元素而不能一次引用整个数组
    133.在定义一维数组时可以只给一部分元素赋初值
    134.对二维数组初始化,可以分行给数组赋初值
    135.可以对二维数组的部分元素赋初值
    136.字符数组中的一个元素只存放一个字符
    137.如果一个字符数组中包含一个以上结束符’\0”,则遇第一个’\0’时输出就结束
    138.puts函数的作用是将一个字符串输出终端
    139.gets丽数的作用是从终端输入一个字符串到字符数组
    140.strlen 函数是测试字符串长度的函数
    141
    strcat函数是“字符串复制函数”。X
    strcpy函数是“字符串连接函数”。X
    strcmp函数是“字符串复制函数”。X
    strlwr函数是测试字符串长度的函数。X
    strupr函数是测试字符串长度的函数。X
    142.C程序一个函数可以被一个或多个函数调用多次
    143.一个C程序可由一个主函数和若干个其它函数构成
    144.C程序以源程序为单位进行编译(而不是函数)
    145.C程序由一个或多个源程序文件组成
    146.C语言在定义函数时是互相独立的,不能嵌套定义
    147.在调用有参函数时,主调函数和被调用函数之间有数据传递关系
    148.在调用一个函数的过程中又出现直接或间接地调用该函数本身称为函数的递归调用
    149.在一个函数内部定义的变量是内部变量,称为局部变量
    150.在函数之外定义的变量称为外部变量,是全局变量
    151.从变量的作用域角度来分,可以分为全局变量和局部变量(而不是静态和动态变量)
    152.静态存储方式是指在程序运行期间分配固定的存储空间的方式
    153.存储方法分为两大类:静态存储类和动态存储类
    154.C语言允许将局部变量的值放在CPU中的寄存器中,这种变量称为“寄存器变量”
    155.局部静态变量不能定义为寄存器变量
    156.如果一个函数只能被本文件中其它函数所调用,称为内部函数
    157.C源程序中的预处理命令,它不是C语言本身的组成部分
    158.宏定义不是C语句,在行末不加分号
    159.宏定又是用宏名代替一个字符串,只作简单的置换,不作正确性检查
    160.在进行宏定义时,可以引用已定义的宏名
    161.宏替换不占程序运行时间,只占编译时间
    162.文件包含处理是指个源文件可以将另一个的全部内容含进来源文件包
    163.一个include命令只能指定一个被包含文件
    164.存放变量地址的变量是指针变量
    165.C语言中变量的指针就是变量的地址
    166.函数的参数也可以是指针变量
    167.指针变量可以指向变量,也可以指向数组和数组元素
    168.引用数组元素可以用下标法,也可以用指针法
    169.用指针变量可以指向一维数组,也可以指向多维数组,用指针变量也可以指向一个函数
    170.一个函数可以带回一个整型值、字符值或实型值,也可以带回指针型的数据
    171.指针数组中的每一个元素都相当于一个指针变量
    172.指针数组中的每一个元素都相当于一个整型变量
    173.指针变量可以有空值,即该指针变量不指向任何变量
    174.若两个指针指向同一个数组的元素。则两指针变量可以进行比较
    175.用户自己定义一个结构教型后们其中并无具体数据
    176.在程序中使用的可和百网时 定义结构体类型的变量
    177.结构体类型的成员也可以是一个结构体变量
    178.结构体成员名可以与程序中的变量名相同
    179.不能将一个结构体变量作为一个整体进行输入和输出
    180.对结构体变量的成员可以像普通变量一样进行各种运算
    181.可以引用结构体变量的地址
    182.可以引用结构体变量成员的地址
    183.结构体数组的每个元素都是一个个结构体类型的数据
    184.对结构体数组可以初始化,即赋初值
    185.可以定义一个指针变量,用来指向一个结构体变量
    186.指针可以用结构体变量作链表中的结点
    187.malloc函数的返回值是一个指向分配域起始地址的指针
    188.建立动态链表是指在程序执行过程中从无到有地建立起一个链表
    189.使几个不同的变量共占同一段内存的结构,称为共用体类型的结构
    190.共用体变量所占的内存长度等于最长的成员长度
    191.定义了共用体变量,只能引用共用体变量中的成员(不能引用公用体变量)
    192.共用体变量的地址和它的各成员的地址都是同一地址
    193.共用体类型可以出现在结构体类型定义中
    194.结构体类型可以出在共用体类型定义中
    195.在C编译中,对枚举元素按常量处理
    196.一个整数不能直接赋给一个枚举变量
    枚举类型在C#或C++,java,VB等一些计算机编程语言中是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中是一种构造数据类型 。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
    枚举可以根据Integer、Long、Short或Byte中的任意一种数据类型来创建一种新型变量。这种变量能设置为已经定义的一组之中的一个,有效地防止用户提供无效值。该变量可使代码更加清晰,因为它可以描述特定的值。
    197.可以用typedef声明新的类型名来代替已有的类型名
    198.位运算的运算量只能是整型或字符型的数据
    200.位运算符与赋值运算符可以组成复合赋值运算符
    在 C 语言中, 一种方法是用叫做位段的构造类型来定义一个压缩信息的结构。
    201.已有定义int (*p)( );指针p可以指向函数的入口地址
    202.C语言中运算对象必须是整型的是%=
    203.int *p 表达的是p是指向int型数据的指针。
    204函数rewind的功能是将文件指针重新指向一个流的开头(即使文件指针重新返回文件的开始位置),int rewind(FILE *stream);并且无返值。
    205.如果函数值的类型与返回值类型不一致,以函数值类型为准
    206.c语言中形参和实参类型不一致时以形参的类型为准
    207.形参应该是函数声明的时候就已经定义好
    208.若有定义int t[3][2],能正确表达t数组元素地址的是–t[2]+1
    209.int[]={1,2};
    210.C语言中的循环语句有for,while,do-while和goto,,***不是if、switch、break
    211.不正确的赋值语句是—ch‘a+b’,正确的是ch=‘\0’ ch=‘7’+‘9’ ch=7+9
    212.正确的赋值语句x3=12;
    213.C语言逻辑运算时,0为假,非0为真
    214.字符串常量是以双引号扩起来的字符序列“a”(其他C语言常量‘\n’ 012)(e-2不是C语言常量----实数的指数形式中,e后面必须有一个整数)

    301.一个位段必须存储在同一存储单元中
    302.位段的长度不能大于存储单元的长度
    303.一个c程序由若干个函数构成,其中有且仅有一个主函数
    304.指针变量中存放的是它所指对象的地址
    305.在C语言中,分号是语句的必然组成部分
    306.结构体变量所占空间是各成员所占空间之和
    307.数据文件可顺序读取,也可借助文件的定位操作实现随机读取
    308.从用户的角度上讲,类型的含义是规定了该类型变量的取值范围和运算范围
    309.c语言中,变量和函数均具有类型和存贮类别两个属性
    340.顺序结构>选择结构>循环结构
    341.函数返回值的类型是由函数定义时指定的类型
    342.*与s[]相等
    343.当从键盘输入数据时,对于整型变量可以输入整型数值和字符,对于实型变量可以输入实型数和整型数值等。
    344. getchar函数没有参数
    345.静态储存方式是在程序运行期间分配固定的储存方式的方式
    356.局部静态变量不能定义为寄存器变量
    357.不能把共用体变量作为函数的参数
    358.一个整数不能直接赋给一个枚举变量
    359.int *p=a 是对指针变量p的正确定义和初始化。
    360.Char s[]=”china”;
    Char p;
    P=s;
    p与s[]相等
    有int [],*p=a
    则p+5表示元素a[]的地址
    361.C语言中,退格符是\b
    362.C语言中,变量的隐含储存类别是auto
    363.实际参数和形式参数可以同名
    364.函数调用可以作为一个函数的形参
    365.结构化程序设计的3中结构是-顺序结构、选择结构、循环结构
    366.当从键盘输入数据时整型变量可以输出整型值和字符,对于实型变量可以输入实型数和整型数值
    367.C语言中逗号运算符的优先级最低,指针最优,单目运算优于双目运算。如正负号。
    先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.
    逻辑运算最后结合。
    368.C语言区分定义变量名的大小写
    369.设有如下定义:
    struck sk
    { int a;
    float b;
    } data;
    int *p;
    若要使P指向data中的a域,正确的赋值语句是(C)A、 p=&a; B、 p=data.a; C、 p=&data.a; D、 *p=data.a;
    370.double)a是将a转换成double类型;(int)(x+y)是将x+y的值转换成整型。
    371.设有以下说明语句:
    struct stu
    {
    int a;
    float b;
    }
    stutype;
    则下面叙述不正确的是( )。
    A) struct是结构体类型的关键字
    B) structstu是用户定义的结构体类型
    C) stutype是用户定义的结构体类型名
    D) a和b都是结构体成员名
    答案解析
    定义一个结构的一般形式为:
    struct结构体名
    {
    成员列表
    }变量名列表;
    本题中的stutype是在声明结构体类型structstu的同时定义的该结构体变量,而不是用户定义的结构体类型名。类型与变量是不同的概念; 2)对结构体中的成员,可以单独使用,它的作用与地位相当于普通变量;3)成员也可以是一个结构体变量; 4)成员名可以与程序中的变量名相同,二者不代表同一对象。
    372.C语言中的数据类型是指-函数返回值的数据类型
    373.C程序设计语言的基本成分是数据成分、运算成分、控制成分、传输成分。
    374.while(t=1)循环控制表达式的值为1。
    375.printf(++x);表示地址所连接的数值加1.
    376.int[3][4]; 表示a为3行
    4列的数组,它可用的最大行下标为2,列下标最大为3;
    若是引用a[0][4],则超过了数组的范围
    377.若有如下说明和定义
    struct test
    {
    int ml; char m2; float m3;
    union uu
    {
    char ul[5]; int u2[2];
    }
    ua;
    } myaa;
    则sizeof(struct test)
    的值是A.12 B.16 C.14 D.9
    正确答案:A
    在本题中,首先定义了一个结构体。在该结构体中,定义了一个整型变量成员、一个字符型变量成员和一个浮点型变量成员,并在结构体中定义了一个联合体变量成员,联合体变量成员中又包含两个联合体成员数组。题目最后要求计算该结构体变量所占的存储空间。
    在C语言中,联合体变量中的所有成员共享存储空间,联合变量的长度等于各成员中最长的长度,因此,本题的联合体部分所占的长度为5,但是结构体与联合体不一样的是,结构体不能共享空间,一个结构体变量的总长度是各成员长度之和,因此,该结构体所需的存储空间为5+1+2+4=12。本题的正确答案选A。
    378.静态储存类别的关键词是static
    379.C语言中提供了存储说明符auto,register,extern,static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块是被建立,它在该程序块活动时存在,退出该程序块时撤销。
    380.fseek(文件指针,位移量,起始点)
    “起始点”用0,1或2代替,0代表“文件开始”,1为“当前位置”,2为“文件末尾”。“位移量”指以“起始点”为基点,向前移动的字节数。ANSIC和大多数C版本要求位移量是long型数据。这样当文件的长度大于 64k时不致出现问题。ANSI C标准规定在数字的末尾加一个字母L,就表示long型。
    381.若有定义:int (*p)[4];则标识符p ,是一个指针指向一个含有四个整形元素的一维数组。
    382.基本数据类型:整型、实型、字符型
    383.EOF是指向文本文件的结束标志,NULL是打开文件错误时的返回值。feof(fp)用来判断文件是否在文件末尾,文本文件和二进制文件均可以使用此函数,如果遇到文件结束就返回1,否则返回0。
    384.C语言的函数可以嵌套调用
    385.标准库函数fgets(s,n,f)的功能是什么–从文件f中读取长度不超过n-1的字符串存入指针s所指的内存。
    从流中读一行或指定个字符,
    原型是char *fgets(char *s, int n, FILE *stream);
    从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
    形参注释:*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针
    说得简单一点就是从f这个文件输入流中读取n-1个字符,存到s中。
    如果一行的字符数小于n-1,那么就是一行的字符数,所以应该理解为不超过n-1,如果一行的长度大于n-1,就是n-1个字符
    386.
    1、数据计算类型不同。基本数据类型分为三类:整数型(定点型)、实数型(浮点型)和字符型。除了基本数据类型,还有构造类型(数组、结构体、共用体、枚举类型)、指针类型、空类型void。
    2、各种数据类型的关键词不同。short、long、int、float、double、char六个关键词表示C语言里六种基本数据类型。
    3、不同数据类型占用内存的大小不同。short占2byte,int占4byte,long占4byte,float占2byte,double占8byte,char占1byte(不同的平台可能占用内存大小不一样,具体的可以用sizeof 测试下)。
    387.一个可以没有变量定义和执行部分,例如空函数

    展开全文
  • c语言入门自学 零基础学c语言教程

    万次阅读 多人点赞 2019-05-04 14:07:32
    考二级c的话c语言书籍的话推荐看谭浩强,但是你要用于工作上的话我推荐你看传智播客的C语言教程!精通C语言肯定得花上几个月时间。 很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言? 我是...

    C语言通过自学软件工程师要多久?
    许多同学问C语言怎么学?考二级c的话c语言书籍的话推荐看谭浩强,但是你要用于工作上的话我推荐你看传智播客的C语言教程!精通C语言肯定得花上几个月时间。
    很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言? 我是一个教师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程序,这简直就是天方夜谭。

    C语言软件工程师都学什么?
    零基础学c语言教程内容:
    按照日期来看就行了,零基础班主要讲一些基础,适合入门学习。
    1.C语言概述,学习方法,开发环境搭建,HelloWorld案例分析,常量与变量;
    2.数据类型,数据类型转换,数据输入与输出;
    3.C语言运算符,C语言操作符;
    4.C语言表达式,表达式优先级;
    5.C语言流程控制,分支,顺序,循环逻辑控制;
    6.函数概述与引用,简单递归,简单嵌套,C语言调用函数示例;
    7.数组,二维数组,高维数组,详细案例;
    8.指针,指针与地址,指针与数组;
    9.指针与字符串,指针与函数,多重指针;
    10.结构体,共用体,枚举,typedef;
    11.宏定义,预编译,文件包含,条件编译;
    12.内存分析,作用域,生存期,可见域;
    13.C语言调试,排错,分析技巧;
    14.简单链表;
    15.综合复习型测试

    零基础学C语言教程百度盘下载地址
    http://www.xuexiluxian.net/cyuyan-rumen.html

    展开全文
  • C语言总结

    万次阅读 多人点赞 2017-12-14 18:27:26
    C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。 2 第一个C程序   #include &lt;stdio.h&gt; int main(){ printf("Hello World"); return 0 ; }  ...

    1.简述C

    C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。

    2 第一个C程序

     

    #include <stdio.h>
     int main(){
        
        printf("Hello World");
        
        return 0 ;
    }


     

     

     

    解释:

    #include <stdio.h>就是一条预处理命令,它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。(关于预处理后面的课程会讲)

    函数就是实现代码逻辑的一个小的单元。 

    3.一个C程序有且只有一个主函数,即main函数。C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口

    4.注释 C语言编译器在编译时会被自动忽略。

    多行注释 /*  ..............    */

    单行注释  //

    5.标识符:

     

    C 语言规定,标识符可以是字母(A~Z,a~z)数字(0~9)下划线_组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:

    (1)标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。 

    (2)标识符是严格区分大小写的。例如Imooc和imooc 是两个不同的标识符。 

    (3)标识符最好选择有意义的英文单词组成做到"见名知意",不要使用中文。

    (4)标识符不能是C语言的关键字。想了解更多C语言关键字的知识,请查阅WIKI。

    6.注意:在定义中不允许连续赋值,如int a=b=c=5;是不合法的

    7 .如下小例子

     

    #include<stdio.h>
    
    int main(){
    
    int age =19 ;
    
    printf("我今年%d\n"+age);
    
    return 0 ;
    
    }


    8.数据类型

     

    基本类型  =======>字符型、整形、浮点类型(单、双)

     

    #include<stdio.h>
    
    int main(){
    
    int age =19 ;
    
    char a ='e' ;
    
    float b  =12.12 ;
    
    printf("今年%d岁,\n",+age);
    printf("性别是%c \n",+a);
    printf("%f\n",+b);
    return 0 ;
    
    }

    9.格式化输出语句

     

     

    #include<stdio.h>
    
    int main(){
    
    int age =19 ;
    
    char a ='e' ;
    
    float b  =12.12 ;
    
    double c = 13.14567 ;
    
    printf("今年%d岁,\n",age);
    printf("性别是%c \n",a);
    printf("%f\n",b);
    printf("%f\n",c);
    printf("%s\n","我是一名好孩子");
    return 0 ;
    
    }

    如果要输出多个变量的并指定变量的位置时候,格式符还可以连用,变量之间需要用逗号隔开,如:

     

     

     

    #include<stdio.h>
    
    int main(){
    
    int age = 18;
    	float height = 1.85;
    	char unit = 'm';
    	printf("小明今年%d岁\n", age);
    	printf("小明身高%f,%c\n", height, unit);
    	printf("%s\n","小明现在在慕课网上学习IT技术"); 
    	return 0;
    
    }

     

    10不可改变的常量

     

     

     

     

    #include <stdio.h>
     #define    POCKETMONEY  10     //定义常量及常量值
     #define   I   'S'
    int main()
    {
      //  POCKETMONEY = 12;  //小明私自增加零花钱对吗?
        printf("小明今天又得到%d元零花钱\n", POCKETMONEY);
        printf("%c\n",'c');
        printf("%d\n",999);
        printf("%f\n",12.12);
        printf("%c",I);
        return 0;  
    }

    11 自动类型转换

    注:字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换

     

    12强制类型转换

     

     

    #include <stdio.h>
    int main()
    {
        double num = 2.5;      //定义浮点型变量num并赋值为2.5
        int  num2 = (int)num ;
        printf("num的整数部分是%d\n", num2);  
        return 0;
    }

    13 运算符号 

     

     

          ※ 算术运算符

          ※ 赋值运算符

          ※ 关系运算符

          ※ 逻辑运算符

          ※ 三目运算符



    14 自增运算符

     

    #include <stdio.h>
    int main()
    {
        int x = 0;
        printf("x=%d\n",x++);
        printf("x=%d\n",++x);
        return 0;
    }

    15 三木运算符

     

    表达式1 ? 表达式2 : 表达式3

     

    #include <stdio.h>
    int main()
    {
    	int money  = 12 ;
    
    	float cost  =11.5 ;  
    	
    	
    	printf("能不能走%c",money>cost?'y':'n');
    
    
        return 0;    
    }

    16 分支结构  是否是闰年 

     

     

    #include <stdio.h>
    int main() 
    {
        int year = 2014; //今年是2014年
        //补全一下代码
        //条件:能被4整除且不能被100整除或者能被400整除的年份为闰年
        if((year%4==0&&year/100!=0)||(year%400==0)){
            printf("%s\n","是闰年");
        }else{
            
            printf("%s","不是闰年");
        }
        
        return 0;
    }

    17 while循环

     

     

    #include <stdio.h>
    int main()
    {
        int i,sum=0;
        i=1;
        while(i<=100)  //循环条件应该是什么呢?
        {
            sum=sum+i;
             i++ ;         //这里是不是应该改变循环变量的值
        }
        printf("100以内所有整数之和为:%d\n", sum);
        return 0;
    }

    18  do-while 

     

     

    #include <stdio.h>
    int main()
    {
        int number=200;
        int year=2014;
    	do{
    		year++ ;
    		number=number*1.2 ;
    	
    	}while(number<1000);
    	
    
        printf("到%d年招工规模突破1000人\n", year);
        return 0;
    }


    19  for循环

     

     

    #include <stdio.h>
    int main()
    {
        // 定义变量sum, num
        int sum, num;  
        sum = 0;
        for(num = 0; num<=10  ; num++ ) //for循环条件与num的变化值
        {  
           sum=sum+num ;
        }
        printf("10以内数的和为:%d", sum);
        return 0;
    }

    20 for注意

     



    for循环里面的东西必须先定义好!!!!



    21.使用循环计算1-2+3-4+5-6+…-100的值

    22  输出一个正三角形

    23 打印9*9 乘法口诀

    24请使用for循环,倒序打印9*9乘法表。打印结果如下图所示 

    25找出0-50之间的所有素数,所谓素数就是只能被1和它本身整除的数字,比如:7,13,23等

    26计算1到20之间不能被3整除的数字之和

    27.

    小明参加期末考试,分数等级分为A-D,等级划分方式如下:

    90<=分数<=100 ,等级为A。

    80<=分数<90 ,等级为B。

    60<=分数<80 ,等级为C。

    分数<60 ,等级为D。

    28自定义方法 (最好放在main方法之前)

     

    #include <stdio.h>
    
    /* 自定义整型函数 sayLove() */
    int sayLove()
    {
        //在这里输入输出语句printf,输出内容为I Love imooc 
       printf("I love Learning");
        return 0;
    }
    
    /* 自定义整型函数 dividLine() */
    int dividLine()
    {
        printf("%s\n", "*************");
        return 0;
    }
    
    /* 主函数 */
    int main()
    {    
        sayLove();
        dividLine();
        return 0;
    }

    29  有参和无参 函数调用

     

     

    #include <stdio.h>
    /* 考虑一下哪个输出该用无参函数哪个输出该用有参函数呢? */
    int  learn(){
        
        printf("小明在学习\n");
        return 0 ;
    }
    int learnnum(int num){
        
        printf("小明学习了%d课了",num);
        
    }
    
    int main()
    {
        learn();
        learnnum(3);
        return 0;
    }

    30.计算三角形的周长

     

     

    #include <stdio.h>
    int getGirth(int a,int b,int c)
    {
        if( (a+b)<=c || (a+c)<=b || (b+c)<=a )   //判断是否为三角形
        {
            printf("不构成三角形\n");
            return 0;                                
        }
        else
        {
          int cirf = a+b+c ;     //计算三角形周长
          return cirf;
        }
           
    }
    
    int main()
    {
        /* 定义三角形三边长 */
        int a, b, c;
        a = 3;
        b = 4;
        c = 5;
        printf("三角形的周长是:%d\n",getGirth(a,b,c) );  //调用周长函数
        return 0;
    }

    注意:void函数中可以有执行代码块,但是不能有返回值,另void函数中如果有return语句,该语句只能起到结束函数运行的功能。其格式为:return;
    32 递归调用函数

     

    计算n的阶乘

    小明为了学好英语,需要每天记单词,第一天记1个,第二天记2个依次类推,到第10天的时候小明一共记了多少个单词?

    请用代码完成,算出小明第10天开始的时候会了多少个单词?

    #include <stdio.h>
    /* 定义获取单词数量的函数 */
    int getWordNumber(int n)
    {   
        if(n == 1)
        {
            return 1;    //第一天只会1个单词
        }
        else{
            return getWordNumber(n-1)+n ;       //到第天会的单词数量
        }
    }
    int main()
    {
        int num = getWordNumber(10);     //获取会了的单词数量
        printf("小明第10天记了:%d个单词。\n", num);
        return 0;
    }

    33. 变量  (如何引用外部变量)

     

    #include <stdio.h>
    void fn()
    {
        static int x = 1;   //定义静态局部变量
        x*=2;
        printf("x=%d\n",x);     
    }
    
    int main()
    {
        int i;
        for(i=0;i<5;i++)
        {
            fn();
        }
        extern int x;      //调用外部变量
        printf("x=%d\n",x);
        return 0;
    }
    int x=100;

    34.内部函数与外部函数

     

     

    #include <stdio.h>
    #include "test.c"   //引用test.c文件
    extern  void printLine()     //这里定义的方法对吗?
    {
       printf("**************\n");   
    }
    int main()
    {
        say();
        return 0;
    }
    #include <stdio.h>
    void say(){
        printLine();
        printf("I love imooc\n");
        printf("good good study!\n");
        printf("day day up!\n");
        printLine();
    }

    35 数组

     

     

    #include <stdio.h>
    int main()
    {
        //第一种形式
        int arrFirst[3] = {1,2,3};
        //第二种形式
        int arrSecond[] = {1,2,3};
        //第三种形式
        int arrThird[3];
        //给arrThird数组每个元素初始化
        arrThird[0]=1 ;
        arrThird[1]=2 ;
        arrThird[2]=3 ;
        //输出第一个数组中的第二个元素
        printf("%d\n", arrFirst[1]);
        //输出第二个数组中的第二个元素
        printf("%d\n", arrSecond[1]);
        //输出第三个数组中的第二个元素
        printf("%d\n", arrThird[1]);
        return 0;
    }

    36 遍历数组

     

     

    #include <stdio.h>
    int main()
    {
        int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        
       int i  ;   //必须先声明变量i
       for(i=0;i<=9;i++){
           printf("%d\n",arr[i]);
           
       }
    
        return 0;
    }

    37 传递数组

     

    #include<stdio.h>
    
    void temp(int arr[]){
    int i ;
    for(i=0;i<=4;i++){
    
    printf("%d",arr[i]);
    
    }
    }
    int main(){
    
    int arr[5]={1,2,3,4,5};
    //传递数组
    temp(arr);
    return 0  ;
    }

    38. 经典冒泡排序

     


    另一种写法

     

    #include <stdio.h>  
      
    void swap(int *a, int *b); //交换两个数  
      
    int main()  
    {  
        int     str[10];  
        int     i, j;  
        //初始化数组为10 9 8 7 6 5 4 3 2 1  
        for (i = 0; i < 10; i++)  
        {  
            str[i] = 10 - i;  
        }  
        //排序,从a[0]开始排,从小到大  
        for (i = 0; i < 10; i++)  
        {  
            for (j = i + 1; j < 10; j++)  
            {  
                if (str[i] > str[j])  
                {  
                    swap(&str[i], &str[j]);  
                }  
            }  
        }  
            //将十个数输出  
        for (i = 0; i < 10; i++)  
            printf("%d\n", str[i]);  
        return    0;  
    }  
    void swap(int *a, int *b)  
    {  
        int   c;  
         c = *a;  
        *a = *b;  
        *b =  c;  
    }  

    39.查询数组中某个元素

     


    40 字符串

     

    在C语言中,是没有办法直接定义字符串数据类型的,但是我们可以使用数组来定义我们所要的字符串。一般有以下两种格式:

    1、char 字符串名称[长度] = "字符串值";

    2、char 字符串名称[长度] = {'字符1','字符2',...,'字符n','\0'};

    注意:

    1、[]中的长度是可以省略不写的;

    2、采用第2种方式的时候最后一个元素必须是'\0','\0'表示字符串的结束标志;

    3、采用第2种方式的时候在数组中不能写中文

    在输出字符串的时候要使用:printf(“%s”,字符数组名字);或者puts(字符数组名字);。例如:



    .

     

    41. 声明二维数组

     

     

    #include <stdio.h>
    int main()
    {
        //使用第一种方式初始化方式声明并初始化二维数组arr1
        int arr1[2][2]={{10,20},{30,40}};
        int arr3[][2]={{20,30},{40,50}};
        //使用第二种方式初始化方式声明并初始化二维数组arr2
        int arr2[2][2];
        arr2[0][0]=10;
        arr2[0][1]=20;
        arr2[1][0]=30;
        arr2[1][1]=40;
        return 0;    
    }

    二维数组定义的时候,可以不指定行的数量,但是必须指定列的数量

     

     

    我是可爱的小尾巴~~   某慕视频 Q32138446038  

     



     

     

    展开全文
  • C语言基础

    万人学习 2020-01-08 14:13:00
    往深学C语言的话那就是学到C在Linux里的应用,Linux十分强大。 2)、C语言是一种计算机程序设计语言。具有高级语言的特点,又具有汇编语言的特点。C语言可作为工作系统设计语言,编写系统应用程序,也可以作为应用...
  • CC语言判断文件后缀名

    千次阅读 2018-12-20 14:21:28
    文章目录【CC语言判断文件后缀名一、 前言二、代码三、结果测试四、参考文件 【CC语言判断文件后缀名 一、 前言 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&...
  • CC语言编译与预处理指令

    千次阅读 2018-05-10 09:50:06
    C语言规定:源程序中可以加入一些预处理指令。但预处理指令并不是C语言本身的组成部分,编译器不能识别它们,不能直接对这些指令进行编译。在使用时需要以“#”开头,用以与C语言区分。 所谓预处理,就是指源程序在...
  • CC语言打开,读取文件

    千次阅读 2018-11-22 02:22:16
    文章目录C语言打开,读取文件一、明明白白我的心二、代码飞起来三、过程不重要,重点看结果 C语言打开,读取文件 一、明明白白我的心 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、...
  • C语言入门系列之1.C语言概述和上机运行简单C程序

    千次阅读 多人点赞 2020-04-15 12:51:47
    C语言由贝尔实验室发表,有《(K&R》标准,并指定ANSI C标准。C语言的强大功能和各方面的有点使其成为最优秀的程序设计语言之一。C语言的特点包括简洁灵活、控制语句书写自由、运算符丰富、数据结构类型丰富、结构化...
  • CC语言文件(包括:文件各种读写方式)

    万次阅读 多人点赞 2018-05-09 09:52:32
    C语言中,扩展名为.c的源文件是由字符构成,而扩展名由.obj目标文件和.exe可执行文件是由二进制符号构成的。其实:txt文件也是一个文本文件。 C如何操作文件——文件指针 C语言是通过文件指针变量的操作来...
  • 文章目录C语言处理文本文档多余空行问题一、原文档(以GBK编码保存)二、代码三、结果 C语言处理文本文档多余空行问题 一、原文档(以GBK编码保存) 二、代码 /* 程序目的:处理原文本(txt格式) 具体: 删除原文本...
  • 文章目录【CC语言判断字符串是否是int型正整数前言一、代码二、结果 【CC语言判断字符串是否是int型正整数 前言 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此程序功能...
  • C语言学习-FirstC

    千次阅读 2016-07-09 00:18:52
    第一个C语言程序,但是包含很多信息,#include 指令,printf函数,scanf函数详细介绍,转移字符 ,以及格式控制字符串的详细介绍,这是C语言的入门程序,包含了很多内容
  • c语言strcpy()用法

    万次阅读 多人点赞 2018-11-30 01:00:43
    c语言strcpy()用法 strcpy,即string copy(字符串复制)的缩写。 strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。 通俗解释 ...
  • C语言学习表

    万次阅读 多人点赞 2010-07-18 06:41:07
    C程语言笔记3 EOF与getchar() C语言笔记4 C语言笔记5 C语言笔记6 C语言笔记7 字符常量与字符串 C语言笔记8 C语言笔记9 查找单词 C语言笔记10 赋值运算符 C语言笔记11 二分...
  • CC语言输入输出缓冲区

    万次阅读 多人点赞 2016-06-19 18:57:33
    其实原因很简单,就是C语言的输入输出缓冲在作怪。 2.缓冲区(行缓冲与全缓冲) 一般情况下,由键盘输入的字符并没有直接送入程序,而是被存储在一个缓冲区当中。缓冲又分为两种,行缓冲和完全缓冲。对于完全...
  • C语言特点

    千次阅读 多人点赞 2019-07-31 19:10:46
    C语言灵活性较高,里面有很多陷阱,看C语言源码先看头文件,里面包含了大部分数据结构。 C语言具有下面一些特点 由于C语言关键字少(只有32个,输入输出都是库函数,而不是...c语法不是太严格,(C语言的设计宗...
  • C语言中声明一个名称就是把一个标识符与某个C语言对象相关联,如变量、函数或类型,C语言中可以声明的名称包括:变量、函数、类型、类型标志、结构成员与联合成员、枚举常量、语句标号和预处理器宏。除了语句标号和...
  • C 对于C语言可移植性的思考

    千次阅读 2016-06-04 22:33:21
    我相信学过C语言的同学,都会在书中看到C语言特点一定有:可移植性。但是什么是可移植?如何才能可移植?C语言是如何做到可移植的?对于初学者,可移植可能是一个经常遇到却很神秘的词。我想通过这篇文章来表达我...
  • C语言结构体和C 结构体的区别

    千次阅读 2015-02-25 16:10:11
    C语言结构体和C 结构体的区别
  • CC语言main函数的三种形式

    万次阅读 2015-04-16 09:10:29
    C语言中,main()函数有三种形式。 1、无参数 #include int main(void) { printf("Hello World!\n"); return 0; } 2、有两个参数 习惯上第一个参数是整型argc,保存了外部调用命令的参数个数,第二个参数是指针...
  • C语言家族的历史

    千次阅读 2016-07-30 15:10:26
    下面是TIOBE的2016年最新的编程语言排名表。当然统计得不一定够准确,因为看到这篇文章的你估计也...C语言原型为ALGOL 60语言(也称为A语言)。 --- 1967年,剑桥大学的Matin Richards对CPL语言进行了简化,于是产生
  • C语言%d%c%f

    千次阅读 多人点赞 2019-11-24 11:58:14
    C语言中的格式字符 %d是用来输出十进制整型数据的实际长度输出; %c是以字符形式输出,只输出一个字符; %f是以小数形式输出单、双精度度数,隐含输出6位小数。 %c 单个字符 %d 十进制整数(int) %ld 十进制...
  • 文章目录C语言int型数组转化为char型字符串数组一、代码二、结果三、说明 C语言int型数组转化为char型字符串数组 一、代码 /* 程序功能: int型数组转化为char型字符串数组 */ #include &lt;stdio.h&...
  • 程序中的变与不变——变量与常量 标识符和关键字 ... 标准C语言不限制标识符的长度,但是受到各个版本的C语言编译系统的限制。大多数情况下,标识符的前8位有效,也就是说,如果两个标识符的前8位相...
  • C语言-倒计时操作操作

    千次阅读 2016-12-29 15:13:53
    C C语言 JNI NDK 倒计时 休眠 unistd库 unistd.h sleep android
  • C语言编程入门/C二级神器/游戏破解

    千人学习 2018-11-26 17:50:35
    C语言是一种通用的、面向过程式的计算机程序设计语言。1972年,为了移植与开发UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了C语言C语言是一种广泛使用的计算机语言,它与Java编程语言一样普及,二者在...
  • 配置VScode c语言环境

    万次阅读 多人点赞 2018-08-03 07:16:51
    成成最近用到C语言了,之前比较喜欢用在vscode上面用python调试,今天我参考了一些文章,也尝试了下在vscode上配置c语言的调试,其中包含一些相关的基础知识。 1、在vscode里面下载c/c++官方插件: 2、安装c/c++...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,412
精华内容 58,164
关键字:

cc语言

c语言 订阅