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
答案 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]保持未初始化并且分配了垃圾值。但是在我的回答中初始化它将起作用。