#include<cstdio>
int main() {
int a[5] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d" ,*(a+1),*(ptr-1));
}
这里有一个+ 1的地址位置被指定为点ptr;
我试过 ptr =(int )&amp; a它指向数组.. 当指针地址存储在某个位置指针中时,ptr指向该位置 如何使用* ptr
引用数组元素的位置程序的输出是2 5 你能解释一下5是输出
答案 0 :(得分:2)
由于a
是一个包含5个整数的数组,&a
是指向5个整数数组的指针。因为指针算术在指向类型的大小的倍数上运行,所以&a+1
是指向存储在a
中的整数之后的5个整数的虚构数组的指针。当你将它转换为指向int并存储在ptr
中时,你得到一个指向该数组中第一个int的指针。
换句话说,
int *ptr = (int*)(&a+1);
相当于
int *ptr = (a + 5);
这使得*(ptr-1)
与*(a+4)
相同,a[4]
与a
的最后一个元素相同。
答案 1 :(得分:0)
数组的名称是地址。因此&a
和a
具有相同的值。 &a
计算到相同的地址,它创建一个类型为int(*)[size]
的指针,它是一个指向数组的指针,而不是一个元素。如果递增此指针,它将添加整个数组的大小,而不是单个元素的大小。
答案 2 :(得分:-1)
int * ptr =&amp; a [0]; ptr现在指向数组的第一个元素(1)ptr + 1指向2,等等。