指针指针如何引用数组

时间:2013-07-15 17:34:11

标签: c++ syntax

#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是输出

3 个答案:

答案 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)

数组的名称是地址。因此&aa具有相同的值。 &a计算到相同的地址,它创建一个类型为int(*)[size]的指针,它是一个指向数组的指针,而不是一个元素。如果递增此指针,它将添加整个数组的大小,而不是单个元素的大小。

答案 2 :(得分:-1)

int * ptr =&amp; a [0]; ptr现在指向数组的第一个元素(1)ptr + 1指向2,等等。