Fat*_*iku 2 c++ arrays pointers
所以我目前正在学习C ++,并试图掌握数组和指针之间的关系。下面的代码显示了我所做的作业。
int A[4] = {20, 30, 40, 50};
int p = A[0];
int* q = &p;
Run Code Online (Sandbox Code Playgroud)
现在,如果我打印出指针值,则会得到以下信息:
A == 0x7ffda1cb1ea0
&A == 0x7ffda1cb1ea0
&A[0] == 0x7ffda1cb1ea0
&p == 0x7ffda1cb1e94
q == 0x7ffda1cb1e94
&q == 0x7ffda1cb1e98
Run Code Online (Sandbox Code Playgroud)
我不真正理解为什么&A [0]和&p的值不同,即使赋值ist p = A [0]也是如此。即使q的大小显示为8,我也无法理解q和&q之间只有4个字节。任何帮助将不胜感激。
我真的不明白为什么&A [0]和&p的值不同
它们是内存中的不同对象,因此它们具有不同的地址。A[4]是一个对象,p是另一个,又q是另一个。赋值使它们拥有相同的值,但它们仍然是两个不同的对象。您可以删除分配,结果将相同。
即使q的大小显示为8,我也无法理解q和&q之间只有4个字节
q设置为的地址p,并&p为您提供的地址q。结果的确4有道理,因为那是很大p的。这就是为什么q在4之后p,因为p占用4字节。
如果您尝试使用参考进行相同的操作,可能会更清楚:
int A[4] = { 20, 30, 40, 50 };
int &p = A[0]; // note the "&", this makes p a reference
std::cout << "&A[0]: " << &A[0] << std::endl << "&p: " << &p << std::endl;
Run Code Online (Sandbox Code Playgroud)
对我来说,这导致:
&A[0]: 008FFD90
&p: 008FFD90
Run Code Online (Sandbox Code Playgroud)
现在p不是可以保存数据副本的单独对象,而是对同一位置的实际引用。