1.数组的地址和数组首元素的地址是一样的。既然地址都是一样为什么还会有这样的问题呢?
数组的地址指向的内存空间的类型是数组类型
数组首元素的地址指向的内存空间的类型是首元素的类型
int main()
{
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//&a地址获得的是数组这个变量的首地址,而a是数组第一个元素的地址
printf("a[0]的地址%d ; a的地址%d ; a+1后的地址%d ; &a+1后的地址%d\n",a,&a,a+1,&a+1);
printf("a[0]的值是:%d\n",*a);
printf("a的值是:%d\n",*&a);
printf("a[0]的值是:%d\n",**&a);
system("pause");
}
a指的是数组的首元素的地址,&a代表的是数组的地址。
所以a+1-a=4;&a+1-&a=40;
2.数组做函数参数参数是有所退化的,退化为一个指针。
数组实际上是在栈上开辟了一段连续内存空间;指针是一个指向某一个内存地址;所以当然可以使用指针来访问数组了。
当把数组作为参数传给一个函数时,传递的不是整个数组,而是数组元素的收地址,这一特性正是C++编译器的高效所在。
void ArrayOperation1(int * a);
void

本文探讨了C++中数组地址与数组首元素地址的差异,解释了为何两者相减结果不同。同时阐述了数组作为函数参数时的退化现象,指出传入函数的实际上是数组首元素的地址,这种退化提高了编译器的效率。通过实例展示了数组在函数调用中尺寸的变化,进一步验证了数组退化为指针的现象。
最低0.47元/天 解锁文章
5047

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



