sizeof() :关键字,并非函数,其作用为返回一个对象或者类型所占的内存字节数。
下面内容主要介绍sizeof()在一纬数组中的用法。
备注:*除sizeof(单个数组名)以及“”&数组名“”中数组名表示整个数组,其余所有数组名均表示该数组的首元素地址;在32位系统下。
#include <stdio.h>
int main()
{
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a)); //16 数组名单独出现代表整个数组
printf("%d\n", sizeof(a + 0)); //4 等价于a[0]
printf("%d\n", sizeof(*a)); //4 等价于a[0],a代表数组第一个元素的地址,解引用找到第一个元素
printf("%d\n", sizeof(a + 1)); //4 等价于a[1]
printf("%d\n", sizeof(a[1])); //4
printf("%d\n", sizeof(&a)); //4 &a 取到的地址为整个数组的地址
printf("%d\n", sizeof(&a + 1)); //4 &a+1 数组a接下来位置的地址
printf("%d\n", sizeof(&a[0])); //4 &a[0] 数组首元素地址
printf("%d\n", sizeof(&a[0] + 1));//4 &a[0]+1 数组第二个元素地址
return 0;
}
#include <stdio.h>
int main()
{
char *p="abcdef";
printf("%p", p); // 00BD58584
printf("%d\n",sizeof(p)); //4 p 代表字符数组的地址
printf("%d\n",sizeof(p+1)); //4 p+1 字符第二个元素b的地址
printf("%d\n",sizeof(*p)); //1 等价于*(p+0);对数组第一个元素解引用,找到a
printf("%d\n",sizeof(p[0])); //1 等价于*(p+0);对数组第一个元素解引用,找到a
printf("%d\n",sizeof(&p)); // 4 &p 取到表整个数组的地址
printf("%d\n",sizeof(&p+1)); // 4 &p+1 取到数组下个位置的地址
printf("%d\n",sizeof(&p[0]+1)); // 4 &p[0]+1 取到数组第二个元素b的地址
return 0;
}
#include <stdio.h>
int main()
{
int a[3][4]={0}; //3行4列的数组
printf("%d\n",sizeof(a)); // 48 a代表整个数组
printf("%d\n",sizeof(a[0][0])); //4 a[0][0]代表首元素
printf("%d\n",sizeof(a[0])); // 16 a[0]=*(a+0) 代表第一行所有元素
printf("%d\n",sizeof(a[0]+1)); //4 第二个元素地址
printf("%d\n",sizeof(a+1)); //4 &a[1]=&*(a+1)=a+1 为第二行的地址
printf("%d\n",sizeof(&a[0]+1)); //4 &a[0]代表第一行的地址,然后加1代表第二行的地址
printf("%d\n",sizeof(*a)); // 16 *a=*a[0] 第一行所有元素
printf("%d\n",sizeof(a[3])); //16 a[3]=*(a+3) 第四行所有元素所占内存
return 0;
}