在此示例中,我有一个包含四个元素的数组。我已经声明了一个指向包含数组地址的整数的指针。然后我以 3 种不同的方式显示了第 0 个索引的地址。同样,第一个索引的地址以 3 种不同的方式显示。当我输出这个 (&pNumbers)+0 时,将显示一个唯一且不同的地址是可以理解的。在下一行,*(&pNumbers+0) 显示第 0 个索引地址(因为它包含在指针中)。现在问题部分来了。在输出此 (&pNumbers)+1 行时,它再次显示数组第 0 个索引。为什么 ?
第一个问题:当我检索指针地址(&pNumbers)时,它会显示新的唯一地址。但是当我在那个地址加起来时。它如何访问数组的元素地址?例如
enter code here
cout<<" (&pNumbers)+1 "<<(&pNumbers)+1<<endl // new address + 1 but showing address of 0 element.
cout<<" (&pNumbers + 2) "<<(&pNumbers+2)<<endl // showing address of of 1st index
第二个问题:如果说它确实以某种方式指向相应的数组元素。在我解引用为什么它没有显示与数组元素对应的正确数据值时。例如
enter code here
cout<<" *(&pNumbers+1) "<< *(&pNumbers+1) // assumption was 31 (but displaying some 0x1f)
cout<<" *(&pNumbers + 2) "<<*(&pNumbers+2)<<endl // assumption was 28 (but displpaying 0x1c)
下面是源代码:
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int main()
{int number[] = { 31, 28, 31, 30};
int *pNumbers = number;
cout<<" Address of number[0] "<<number<<endl;
cout<<" Address of number[1] "<<number+1<<endl;
cout<<" Address of number[2] "<<number+2<<endl;
cout<<" Address of number[3] "<<number+3<<endl<<endl;
cout<<" Address of &pNumbers "<< &pNumbers<<endl<<endl; // address of pNumbers
cout<<" Address of number "<< number<<endl; // address of array's first element
cout<<" pNumber Address "<< pNumbers<<endl;
cout<<" &(pNumbers[0]) "<< &(pNumbers[0])<<endl<<endl;
cout << " pNumbers+1: " << pNumbers+1<<endl; //address of array's second element
cout<<" (&pNumbers[1]) "<<(&pNumbers[1])<<endl; //
cout<<" (pNumbers+1) "<< (pNumbers+1) <<endl<<endl;
cout<<" (&pNumbers)+0 "<< (&pNumbers)+0<<endl;
cout<<" *(&pNumbers+0) "<< *(&pNumbers+0)<<endl<<endl;
cout<<" (&pNumbers)+1 "<<(&pNumbers)+1<<endl<<endl; // new address + 1 expected but displaying array's 0th index address why ?
cout<<" *(&pNumbers+1) "<<*(&pNumbers+1)<<endl<<endl;
cout<<" (&pNumbers + 2) "<<(&pNumbers+2)<<endl<<endl;
cout<<" *(&pNumbers + 2) "<<*(&pNumbers+2)<<endl<<endl;
cout<<" (&pNumbers + 3) "<<(&pNumbers+3)<<endl<<endl;
cout<<" *(&pNumbers + 3) "<<*(&pNumbers+3)<<endl<<endl;
cout<<" (&pNumbers + 4) "<<(&pNumbers+4)<<endl<<endl;
cout<<" *(&pNumbers + 4) "<<*(&pNumbers+4)<<endl<<endl;
return 0;
}