之前理论性的太多,下面就是代码及理论结合了

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个函数指针的数组