![](/img/trans.png)
[英]How can C++ array pointers have different location, yet point to the same element?
[英]how can these 2 pointers have the same value?
我對此代碼有疑問,答案是26 14 26 26。
問題是,我一直發現x為13。在第一個有趣的函數x和xptr變為13之后,但我不知道它如何變為26。
#include <iostream>
using namespace std;
int* fun(int *a){
*a = *a +5;
return a;
}
int main(){
int x, y, *xpntr, *ypntr;
x = 3;
xpntr = &x;
fun(xpntr);
y = 10 + (*xpntr / 2);
ypntr = fun(xpntr);
*ypntr = *xpntr + *ypntr;
cout << x << " " << y << " " << *xpntr << " " << *ypntr << endl;
}
在您的ypntr = fun(xpntr);
之前ypntr = fun(xpntr);
行x=8
,並且xpntr
指向x
。
現在是棘手的部分: ypntr = fun(xpntr)
的值更改x
到13和fun
返回一個參考x
- ypntr
現在指向x
為好。
這意味着xptr
和yptr
都指向相同的數據。
您的最后一條語句( *ypntr = *xpntr + *ypntr
)只是將x
的值加倍。
+---------------------------+----+----+------+------+
| code | x | y | xptr | yptr |
+---------------------------+----+----+------+------+
| x = 3; | 3 | ? | ? | ? |
| xpntr = &x; | 3 | ? | &x | ? |
| fun(xpntr); | 8 | ? | &x | ? |
| y = 10 + (*xpntr / 2); | 8 | 14 | &x | ? |
| ypntr = fun(xpntr); | 13 | 14 | &x | &x |
| *ypntr = *xpntr + *ypntr; | 26 | 14 | &x | &x |
+---------------------------+----+----+------+------+
讓我們逐步檢查您的代碼
#include <iostream>
using namespace std;
int* fun(int *a){
下一行表示:“從指針a
所指向的位置獲取值,將其加5,然后將其寫入指針a
所指向的位置。” 這不會更改指針本身!
*a = *a +5;
接下來返回指針a
,該指針與傳遞給函數的值相同
return a;
}
int main(){
int x, y, *xpntr, *ypntr;
x = 3;
將x
的存儲位置分配給xpntr
xpntr = &x;
用xpntr
調用fun
,丟棄它返回的內容。 x將是3 + 5 = 8
fun(xpntr);
將10 +( xpntr
指向的值 / 2)的值分配給y
-xpntr不會改變。 y = 10 +(8/2)= 14
y = 10 + (*xpntr / 2);
使用xpntr
調用fun
時, xpntr
指向的內容發生了xpntr
,但是正如我們已經了解到的那樣,xpntr本身在此過程中並未更改。 fun
返回的值(只是xpntr
)被分配給ypntr
。 x將再次更改為8 + 5 = 13
ypntr = fun(xpntr);
分配給ypntr
指向的位置(現在與xpntr
相同, xpntr
xpntr
和ypntr
指向的總和。因此x就是13 + 13 = 26 ←這就是您的26來自何處!
*ypntr = *xpntr + *ypntr;
打印xpntr
和ypntr
指向的位置的值。
cout << x << " " << y << " " << *xpntr << " " << *ypntr << endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.