区分数组与指针:
| 特性 | 数组 | 指针 |
|---|---|---|
| 本质 | 连续内存块的别名 | 存储地址的变量 |
| 内存分配 | 编译时确定大小 | 运行时动态分配 |
| 存储内容 | 实际数据 | 内存地址 |
代码分析:
#include<stdio.h>
int main(){
int a[10]={0,1,2,3,4,5,6,7,8,9};
printf("a: %p\n",a);//a类型是 int*,指向数组首元素 a[0],指向数组首地址
printf("a+1: %p\n",a+1);//等同于对a[1]取地址
printf("*a: %d\n",*a);//对a解引用,相当于a[0]
printf("a[0]: %d\n",a[0]);//a[0]数值
printf("&a: %p\n",&a);//&a类型是 int (*)[10],指向整个数组,它的值和a(即&a[0])是相同的,但是类型不同,可以比较a+1和&a+1的区别
printf("&a+1: %p\n",&a+1);//相当于a[0]的地址加上n*sizeof(int)的地址
printf("&a[0]: %p\n",&a[0]);//对a[0]取地址,等同于a
printf("&a[1]: %p\n",&a[1]);//对a[1]取地址,等于a[0]地址+sizeof(int);
printf("&a[9]: %p\n",&a[9]);//对a[9]取地址
}
运行结果:可以看到a+1与a相差4,刚好是int类型的字节大小,&a和&a+1相差28,转化成10进制为16*2+8=40,刚好是10个int类型的大小。

数组与指针的区别解析
8435

被折叠的 条评论
为什么被折叠?



