1.1 基本类型
1.2 指针
1.3 数组
1.3.1 数组的sizeof返回整个数组所占的字节数,即(数组元素个数×每个元素所占字节)。
结果:4*4=16
1.3.2 常量字符串与字符数组的内存分配方式相同。
结果都是:
1.3.3 数组和指针所占的字节数不同,应注意区分。
结果:
再看一个例子:
结果是:
分析:
首先double *(*b)[3][6];
是一个二维数组,里面的元素都是一个指针,指向double类型的数。b也是一个指针,它指向这个二维数组。
1. b:b是一个指针,所以为4.
2. *b:*b相当于定义一个double* m[3][6]
中的m,所以*b=m=3*6*4,因为元素是指针,所以每个元素占4个字节,结果为72.
3. **b:**b相当于上面说的*m,也就是m[0]的大小。为6*4=24.
4. ***b:***b相当于*m[0],即m[0][0]的大小,为4.
5. ****b : ****b就是m[0][0]所指向的那个单元。为double型,所以为8。
1.3.4 函数形式参数中的数组会蜕变为指针,原因是数组参数“传址调用”,调用者只需将实参的地址传递过去。有一种情况例外,那就是参数是指向数组的指针。
例1.
分析:这里的函数的参数数组,会背蜕化为指针,所以p的大小为4.
同时,因为蜕化为指针,所以对p进行修改,也会对原来的数组进行修改。
结果:
例2.
分析:这里的参数是int (*)[3]类型。这就是那种例外的情况,也就是参数是指向数组的指针。
所以结果为:
与之要注意区别的:
分析:这里参数是 int *[3]类型,即定义一个元素是指向int型的数组。本质上参数还是数组。所以结果为:
结构体跟联合下次专门弄一篇再写。