一个C数组的小细节
#include <stdio.h>
int main() {
int a;
int b[10] ;
printf(" b:%d\n b+1:%d\n &b:%d\n &b+1:%d \n", b, b+1, &b, &b+1);
printf("sizeof(b):%d \n", sizeof(b));
printf("sizeof(a):%d \n ", sizeof(a));
}
运行结果如下:

b:6422000:数组首元素的地址
b+1:6422004:数组元素+1的地址,一个元素4个字节,所以是6422004
我们来验证一下这个结论:
int b[10] ={1,2,3,4,5,6,7,8,9,10};
printf(" b+1:%d\n",*(b+1));
printf(" b+1:%d\n",*(b+2));
printf(" b+1:%d\n",*(b+3));

和我们分析的是一致的。
&b:6422000:整个数组的地址
&b+1:6422040:数组地址+数组预分配内存空间
sizeof(b):40:c编译器分配40个字节的内存
sizeof(a):4:c编译器分配4个字节的内存
数据类型的本质:固定大小内存块的别名
int main()
{
int a = 10;
int b[10] ;
printf("int a:%d \n", sizeof(a));
printf("int a:%d \n", sizeof(int *));
printf("int b:%d \n", sizeof(b));
printf("int b:%d \n", sizeof(b[0]));
printf("int b:%d \n", sizeof(*b));
printf("hello.....\n");
getchar();
return 0;
}

为什么int是4 而int *是8?
指针几个字节跟语言无关,而是跟系统的寻址能力有关,譬如以前是16为地址,指针即为2个字节,现在一般是32位系统,所以是4个字节,以后64位,则就为8个字节。

浙公网安备 33010602011771号