数组指针和数组名的&

数组名是数组第一个数据的地址,是一个指针常量,但在sizeof和&的情况下不同

sizeof返回整个数组的长度,而不是指向数组的指针的长度。取一个数组名的地址所产生的是一个指向数组的指针,

而不是一个指向某个指针常量的指针。&a后返回的指针便是指向数组的指针,跟a在指针的类型上不同

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5         int a[5] = {1, 2, 3, 4, 5};
 6         int *ptr = (int*)(&a+1);//&a是指向数组的指针 +1实际上加了5个int的长度 到了a[5] 强制转换为int*指针 减一后减了一个int长度到达a[4]
 7         cout << *(ptr-1) << "\t" << *(ptr-2) << endl; // 5 4
 8 
 9         int *p = (int *)(a+1);                        //2
10         cout << *p << endl;
11 }

猜你喜欢

转载自www.cnblogs.com/9527s/p/12966632.html