C语言深度解剖 笔记5

来源:互联网 发布:苹果手机怎么删除软件 编辑:程序博客网 时间:2024/06/10 05:57
1柔性数组 flexible array
C99中,结构中的最后一个元素允许是未知大小的数组,这就叫柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。柔性数组成员允许结构中包含一个大小可变的数组。sizeof返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。如:
typedef struct st_type
{
int i;
int a[];
}type_a;
type_a *p = (type_a *)malloc(sizeof(type_a) + (sizeof(int ))*100);


2如何用程序确认当前系统的存储模式(大端模式、小端模式)?
用一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1。
int checkSystem()
{
union chech
{
int i;
char ch;
}c;
c.i = 1;
return (c.ch == 1);
}


3const在修饰结构体指针时
typedef struct student
{
//code
}stu_st,*stu_pst;
const stu_pst stu1;
stu_pst const stu2;
编译器在解析时,把stu_pst看做是一个类型名,一个整体,所以const始终修饰的是指针。


4注释
int/**/i;编译器会将注释剔除,并用空格代替原来的注释
/*...*/这种形式的注释是不能嵌套的,而且/*总是与离它最近的*/匹配


5出色的注释
1) 注释应当准确、易懂,防止有二义性。错误的注释不但无益反而有害
2) 边写代码边写注释,修改代码同时修改相应的注释
3) 注释应当简单明了
4) 全局变量必须注释
5) 注释采用英文,尽量避免在注释中使用缩写
6) 注释代码段时应注重“为何做(why)”,而不是“怎么做(how)”
7) 数值单位一定要注释
8) 对于函数的入口出口数据给出注释


6续行符\
C语言中以反斜杠"\"表示断行,注意反斜杠后不能有空格


7#运算符
在字符串中包含宏参数,可以使用"#",它可以把语言符号转化为字符串。
#define SQR(x) printf("the square of "#x" is %d.\n",(x)*(x));
再使用SQR(8);则输出The square of 8 is 64.


8##预算符
它把两个语言符号组合成单个语言符号。例如:
#define XNAME(n) x##n

如果XNAME(8)则会被展开成x8


本笔记只为本人方便和供大家分享学习,无意侵权,请各位谅解。






原创粉丝点击