无法通过指针访问数组值

时间:2017-03-07 05:41:11

标签: c++

int *ptrr;
int array[3];
for(int i=3;i>0;--i){
      array[i]=i*100;cout<<array[i]<<" "<< & array[i]<<endl;
}
ptrr=array;
for(int i=3;i>0;--i){
    cout<<*(ptrr+i)<<" ";
}
cout<<endl;
for(int i=3;i>0;--i){
    cout<<ptrr[i]<<" ";
}
cout<<endl;
cout<<ptrr<<" "<<*ptrr<<" "<<*ptrr+1<<*ptrr+2<<endl;

我有一个基本问题,我可以通过循环中的指针访问数组元素,但是当单独访问时,它会弹出奇怪的值。指针仍然相同,仍然给出不同的值。问题是什么..?

输出:

300 0x7ffface5538c
200 0x7ffface55388
100 0x7ffface55384
300 200 100 
300 200 100 
0x7ffface55380 -1394257008 -1394257007 -1394257006

2 个答案:

答案 0 :(得分:0)

使用*(ptrr+1)*(ptrr+2)*的优先级高于+

答案 1 :(得分:0)

您的代码中有两个不同的问题。

首先你的循环迭代器是错误的。您的数组大小为3(有效索引为0,1,2),因此没有数组[3](此内存位置超出范围)。

你应该像下面给出的那样重写你的循环

for(int i=2;i>=0;--i){
      array[i]=i*100;cout<<array[i]<<" "<< & array[i]<<endl;
}

其次你应该在下面的陈述中使用()。

cout<<ptrr<<" "<<*ptrr<<" "<<*ptrr+1<<*ptrr+2<<endl;

并将您的陈述重写为

cout<<ptrr <<" "<<*ptrr<<" "<<*(ptrr+1)<< " " << *(ptrr+2)<<endl;

语法* ptrr非常好,但是因为你已经从i = 3开始循环并且在i> 0(即i = 1)处终止,所以数组[0]保持未初始化并且分配了垃圾值。但是在我的回答中初始化它将起作用。