---1.结构的前置不完整声明 :
------------------------------------结构的前置不完整声明 实现了两个结构相互包含 使C实现抽象封装成为了可能
------------------------------------ex:
struct b;
struct a
{
struct b *b_;
};
struct b
{
struct a *a_;
};
---2.结构对齐:
------------------------------------对齐的模数为【#pragma pack指定的数值】、【未指定#pragma pack时,系统默认的对齐模数(32位系统为4字节,64位为8字节)】和【结构体内部最大的基本数据类型成员】长度中数值较小者 结构体的长度应该是该模数的整数倍。
---3.位段:
------------------------------------位段依赖于当前系统中整形的最大数目 使用后移植性不好 好处是可以使奇数并且很小的数据包装在一起 使空间更加紧凑 仅作了解
---4.calloc / realloc:
------------------------------------malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。
------------------------------------calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域,返回首地址。
------------------------------------realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。
------------------------------------安全起见 慎用realloc
---5.strdup:
------------------------------------复制字符串到新位置 内部会调用malloc 所以要与free() 成对使用
---6.函数指针:
------------------------------------1)回调函数:将函数像参数一样传递 供调用函数在合适的时候使用这个传入的函数
------------------------------------2)转移表:将需要选择的函数列表放进一个函数指针数组避免通过条件选择调用 需要注意的是 所使用的函数们需要在列表之前声明
----------------------------------------转移表 ex:
double (*oper_func[])(double ,double )= {add,sub,mul,div};
---7."xyz"[1]:
------------------------------------将字符串常量用作数组用图
------------------------------------ex:
//将16进制数转换为字符
putchar("0123456789ABCDEF"[value%16]);