C语言小节

来源:互联网 发布:js实现原生下拉菜单 编辑:程序博客网 时间:2024/05/29 07:00

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]  ;是一个指向整形数组的指针。

原创粉丝点击