const的使用:
首先const原来是c++里面的,用来定义常量,后来被引用到C语言里面来,用来定义只读变量 例如(int const a),表示a这个值只可读不可以进行其他操作。但是a++可以,改变这个指针的地址可以但不可以改变指针所指的内容。例如(int const a) const a 是指针变量,指针不可以修改,内容可改但指针地址不可改。例如(int const * const a)表示内容和指针都不可以改。
extern和static:当文件里定义了static ,被static定义的只能在这个文件里使用,如果没有static,可以在另外一个文件里声明extern进行引用。在同一个源程序里不可以在多个文件里设置相同的文件名。
函数:函数传值是通过两种方式,一是通过返回值,二十通过参数返回。
goto:在C语言里再多重嵌套循环里,从最里循环跳到最外循环,这是唯一使用的地方。goto其实也可以作为循环,但是这个循环条件,一般不用。
struct()结构体:结构体是可以嵌套定义的,也可以定义在函数里。注意如下图这个就是结构体struct不能丢,后面跟的是结构体名,其后也可以再定义结构体变量。
这里在最后一行定义的就是结构体变量。结构体变量可定义多个。结构体定义后所占的内存是结构体内数据类型占字节数的总和,这里还要注意的是里面还有字对齐和半字对齐。
字对齐:在结构体中定义了不同的数据类型。这里只要有整型,每个数据类型所占的内存必须是四的倍数,且只看整型。
半字对齐只看short
变量用".",指针用:"->",下图(*p).score 中()不能去,这里有优先级(注意常复习优先级)结构体的指针只能指向自己,不可以指向别人。
struct初始化有两种方式:按位置初始化和指名初始化。
数组名不能做为左值,字符数组赋值只能复制例如:
strcpy(stu1.name,”liming“);一维数组大小有两种方法。1.写在[ ]中。2.在定义是直接复制,可以在[ ]中可以省略指定大小。二位数组及其以上只能省略第一个,其他不可以省略。
**union(共用体)**其书写结构与结构体格式差不多
结构体与共用体的区别在于,结构体中的各个成员会占用不同的内存,而共用体各个成员共用同一块内存,比如说:共用体成员有int a; char b; 他们共用的内存地址比如说在内存块编号为2000的位置,a和b在内存的首地址是一样的,都从2000位置开始。union也有字对齐。
字节序分为大端字节序和小端字节序,
1 #include <stdio.h>
2
3 union endian
4 {
5 int a;
6 char b;
7 };
8
9
10 int main()
11 {
12 union endian e;
13
14 e.a =1;
15
16 if(e.a==1)
17 {
18 printf(“litter\n”);
19 }
20 else
21 {
22 printf(“big\n”);
23 }
24
25 return 0;
26 }
验证大小端字节,在网络编程里用的比较多。
字符串没有字节序,因为字符串里面元素都是统一都类型,不存在以上情况。
enum (枚举)
**switch()**括号中是整型表达式,字符也可以,case+的也必须是整型常量。
#define(宏定义)
可以避免产生幻术。预处理=>宏展开也是宏替换。带参数的函数,在替换时需要替换两次。使用频率高的函数用宏定义比较好,没有流程转移,执行效率增大。
用于分段调试程序。
for(;