这个问题是我和同学讨论时,产生的思考,后来做的实验性解答。
先来看一段小程序
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. int a[5]={1,2,3,4,5};
7. int *ptr=(int *)(&a+1);
8. cout<<*(a+1)="<<*(a+1)<<"*(ptr-1)="<<*(ptr-1);
9. return 0;
9. }
输出结果:
*(a + 1) = 2
*(ptr – 1) = 5
原因是a代表数组a的首地址,而&a代表的是整个数组a的地址,目前它们的值是一样的。但是如果当它们分别进行加1的时候操作,代表的含义就不同了
测试用例代码:
1. #include<iostream>
2. using namespace std;
3.
4. int main() {
5. int a[5]={1,2,3,4,5};
6. cout<<" a type="<<typeid(a).name()<<endl;
7. cout<<" &a type="<<typeid(&a).name()<<endl;
8. return 0;
8. }
输出结果:
a type = int *
&a type = int (*)[5]
也就是说 一个是普通的指针,一个是数组的指针,二者严格的讲,类型不同,划分的尺度大小不同

本文通过两个实验性程序代码实例,详细解释了C++中数组与指向数组的指针的区别,包括它们的地址运算行为及类型的差异。
451

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



