助力软件开发企业降本增效 PHP / java源码系统,只需一次付费,代码终身使用! 广告
```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)); } ``` 运行结果如下: ![](https://img.kancloud.cn/af/fb/affbc6909983fda785b62430ce0f0ab5_569x159.png) b:6422000:**数组首元素的地址** b+1:6422004:**数组元素+1的地址,一个元素4个字节,所以是6422004** 我们来验证一下这个结论: ```c 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)); ``` ![](https://img.kancloud.cn/f0/84/f084e6eb1b3f50b6adc14b29e03a32b1_454x130.png) 和我们分析的是一致的。 &b:6422000:**整个数组的地址** &b+1:6422040:**数组地址+数组预分配内存空间** sizeof(b):40:**c编译器分配40个字节的内存** sizeof(a):4:**c编译器分配4个字节的内存** **数据类型的本质:固定大小内存块的别名** ```c 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; } ``` ![](https://img.kancloud.cn/f1/53/f1533bb97f21c5cddc89bbe5c9ff4bef_899x142.png) 为什么int是4 而int *是8? **指针几个字节跟语言无关,而是跟系统的寻址能力有关,譬如以前是16为地址,指针即为2个字节,现在一般是32位系统,所以是4个字节,以后64位,则就为8个字节。**