2017-03-07 54 views
0
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

你正在走出数组的界限。改变所有'for(int i = 3; i> 0; - i){'to'for(int i = 2; i> = 0; - i){'。 – songyuanyao

+0

您的代码不完整;特别是它似乎缺少'main()'函数和至少一个'#include'。请[编辑]你的代码,这是你的问题[mcve],然后我们可以尝试重现并解决它。你还应该阅读[问]。 –

回答

0

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

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]保持未初始化并分配垃圾值。但在我的答案初始化它将工作。