1、C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。
2、面向过程?面向过程是一种以事件为中心的编程思想,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个偏门调用就可以了。
3、基本数据类型:基本数据类型最主要的特点是,其值不可以再分解为其它类型。
4、构造数据类型:构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的:数组类型、结构休类型、共用体(联合)类型。
5、在赋值运算中,赋值号两边量的数据类型不同是,赋值号右边量的类型将转换为左边量的类型。
6、无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。
7、字符串常量中最后一个为'\0',为结束符,
8、goto语句是一种无条件转移语句,语句使用格式:goto 语句标号;,其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句,另外标号必须与goto语句同处于一个函数中,但可以不在一具循环层中。
9、C语言中不允许对数组进行动态定义。
10、C语言中只能逐个的使用数组内的元素,不能一次性引用整个数组。
11、在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。
12、数据名即为数组第一个元素的首地址。
13、数组作为函数参数时,如果数组元素作为函数参数,则为值传递,如果以整个数组作为参数,则为址传递。
14、局部变量存放在栈中,全局变量存放在数据区中。
15、静态存储方式是指在程序运行开始时由系统分配固定的存储空间,动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间。
16、用户存储空间分为程序区、静态存储区(全局变量)、动态存储区(局部变量)三部分。
17、存储方式分为两大类:静态存储类和动态存储类。具体包括四种:自动的(auto),静态(static),寄存器的(register),外部的(extern),根据变量的存储类别,可以知道变量的作用域和生存期。
18、auto变量:函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的(栈),数据存储在动态存储区中。
19、static声明局部变量:有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就早一次函数调用结束时的值,此时就应该指定该局部变量为静态局部变量,用关键字static进行声明。
20、静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。
21、静态局部变量定义时如果不赋初值,则编译时时自动赋初值为0或空字符,对自动变量来说,如果不赋初值则它的值是一个不确定的值,这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
22、虽然静态局部变量在函数调用结束后仍然存在,但其它函数是不能引用它的。
23、外部变量即全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。编译时将外部变量分配在静态存储区。用extern声明外部变量,用以扩展变量的作用域。在声明的全局变量之前使用该变量,需要用extern对变量进行声明即可。
24、static不仅可以将一个变量声明为静态变量,且可以将某个变量捆绑在其作用域内而不被其它作用域或文件引用。
25、定义是建立存储空间的过程,而声明不需要建立存储空间(如extern a)。
26、二维数组指针变量说明的一般形式为:类型说明符(*指针变量名)【长度】,其中“*”表示其后的变量是指针类型,“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。
27、void *p:
表示指针变量P不指向一个确定的类型数据,它的作用仅难是用来存放一个地址。
void指针它可以指向任何类型数据,也就是说,可以用任何类型的指针直接给void指针赋值。但是,如果需要将void指针的值赋给其它类型的指针,则需要进行强制类型转换。
28、char * const str此时str的值(地址)不能改变,批指向地址的值可以改变;
const char * str此时str所指向地址的值不能改变,其值(地址)可以改变;
const char * const str此时str批指向地址的值和其本身的地址均不能改变。
29、宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束,如果要终止其作用域可以使用#undef命令。
30、宏定义只是简单的字符串代换,是在预处理完成的,而typedef是在编译时处理的,它不是作简单的代换,而是对类型说明符重新命名,被命名的标识符具有类型定义说明的功能。
31、对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参,带参宏定义的一般形式为:#define 宏名(形参表) 字符串。
32、在宏定义中,字符串内的形参通常要用括号括起来以避免出错。
33、预处理命令中的包含命令,当用尖括号时则先由系统指定包含头文件的文件夹查找,而不在源文件目录去查找,如果用双引号则由源文件目录开始查找,若无则到系统指定的包含目录查找。
34、结构体定义形式:struct 结构名 {成员列表};
35、定义结构体方式:
⑴先声明结构体类型再定义变量名:struct student student1,student2;
⑵直接定义结构体类型变量:struct{成员列表 }变量名列表;
36、当定义了指向结构体的指针变量并赋值后,通过指针变量访问结构体方式:
⑴(*结构指针变量).成员名;
⑵结构指针变量->成员名;
37、动态内存管理函数:
⑴分配内存空间函数malloc、calloc;
⑵释放内存空间函数free。
38、void *malloc(unsigned int size);
其作用是在内存的动态存储区中分配一个长度为size的连续空间(size是一个无符号数)。
此函数的返回值是一个指向分配域起始地址的指针(类型为void)。如果此函数未能成功地执行(如内存空间不足),则返回空指针(NULL)。
39、void *calloc(unsigned n , unsigned size);
其作用是在内存的动态存储区中分配n个长度为size的连续空间。
函数返回一个指向分配域起始地址的指针。
如果分配不成功,返回null。
用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。
40、void free(void *p);
其作用是翻译由p指向的内存区,使这部分内存区能被其他变量使用。
p是最近一次调用calloc或malloc函数时返回的值。
free函数无返回值。
41、链表是一种常见的重要的数据结构,是动态地进行存储分配的一种结构。
链表由头指针(存放一个地址,该地址指向第一个元素)、结点(用户需要的实际数据和链接节点的指针)组成。
42、建立动态链表:指在程序执行过程中从无到有地建立起一个链表,即一个一个的开辟结点和输入各结点数据,并建立起前后相链的关系。
43、共用体变量所占的内存长度等于最长的成员的长度。同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种,共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用,共用体变量的地址和它的各成员的地址都是同一地址。不能在定义共用体变量时对它对它初始化。不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针。