之前理论性的太多,下面就是代码及理论结合了
1、sizeof()是一个独立运算符,并不是函数,可以让我们知道任何变量字节数,可以顺带学一下struct,union,内存对齐
内存对齐:为了机器指令快速指向地址值,编译器内部实际上会内存对齐,怎么理解了,以struct为例
先讲一下各个变量类型内存大小
所以struct理论上是:1+2+4+4+4+8+8 = 31,但是实际是
实际大小是32(1+2+1+4)+(4+4)+8+8
然后再把int和short位置调换
实际大小是40 (1+3)+4+(2+2)+4+(4+4)+8+8
这边会因为不同的系统位数和编译器产生不同的变化
union更出乎意料
g
其所有变量共用一个地址,所以内存大小为最大的一个变量,一次只能保存一个变量的值,会覆盖
2、下面提俩个调试技巧
汇编或者在硬件上嵌入式开发的时候,不方便代码频繁修改,可以用
1)、预处理的方式
#define DEBUG
#if DEBUG
/* 处理调试 */
#endif
2)、代码开关,加个bool 参数,其值可以从函数参数输入
3、函数指针
void func(){
..................;
}这是函数申明
void (*p) ();函数指针,指向一个无参返回值为void型的函数,这是基本的
还有很多复杂的感觉不会用到,如double (*(*(*p)())[10])();p是一个指向函数的指针,并且无参数,并指向一个含有10个指向函数指针数组的指针--业务代码很少用,这么用后面也基本上没有办法维护了,顶多个人自己写的库内部使用,不应该作为接口
注意: int (*(*p())[10]) ();是一个函数,p是一个返回指针的函数,该指针指向含有10个函数指针的数组