C语言小节

    技术2022-05-19  24

    C语言总共有32个关键字。 register:声明寄存器变量,告诉编译器尽可能的将变量存在cpu内部的寄存器中,而不是内存中; volatile:说明变量在程序执行中可被隐含的改变; 定义:(编译器)创建了一个对象,并为其分配了一块内存而且还取了一个名字; 声明:告诉编译器这个名字已经被分配给一个内存区域,在统一个作用域中不可再使用了。 void *memcpy(void *dest,const void *src,size_t len); void *memset(void *buffer,int c,size_t num); (ps:标准库的编写者都不是一般人,连两者的返回值都是 void *) const是只读变量,不是常量; 柔性数组(flexible array):C99中,结构体中的最后一个元素允许是大小未知的数组,这就叫做柔性数组成员;但是,必须满足柔性数组成员之前至少有一个成员。 使用sizeof()返回的大小不包含柔性数组,我们可以使用malloc()分配内存。 typedef struct st_type {   int i;   int a[]; }type_a; type_a *p=(type_a *)malloc(sizeof(type_a)+100*sizeof(int)); free(p); 即使分配完内存以后再使用sizeof()也不回包括柔性数组的大小,它是结构体的编外人员,只是在使用时说成结构体的成员。 's'字符常量1B;"s"字符串常量2B。 C语言“贪心法”: 每一个符号应该尽可能的包含更多的字符(不包括空白字符)。 所以: i+++m=i++ +m 运算符优先级: [] () . -> 负号 (强制类型转换) ++ -- *(取值运算) & ! ~(按位取反) sizeof #define BSC // #define BMC /* #define EMC */ 注意:注释是先于预处理指令被处理的,因此,在预编译的时候会把BSC等展开,这时就会出现错误。 所以,试图用宏开始或结束一段注释是不行的。 将数据存储到制定内存位置: int *p=(int *)0x123f7c;  //必须要有类型转换 *p=1000; 或者: *(int *)0x123f7c=1000; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int a[5] a为右值时,代表数组首元素的首地址,而非数组的首地址; a/a[0]/a[1]等为a集合的一个元素,编译器只给这20B的空间(整体)取了一个名字,并没有为其元素取名字。 以指针的形式访问数组;以下标的形式访问数组!!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 指针和数组 在使用extern的时候,一定要确认自己的代码在一个地方声明为指针,在别的文件中也要声明为指针;在一个地方声明为数组,在其他文件中也要声明为数组。 编译器往往是按文件编译的,所以,要注意,声明的类型要一致。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 指针数组:存储指针的数组,一个数组的成员是指针; 数组指针:一个指向数组的指针。 如: int *p1[10]  ;[]优先级高于*,p1[10]声明为数组,int *为数组成员类型,所以,是指针数组。 int (*p2)[10]  ;是一个指向整形数组的指针。


    最新回复(0)