簡體   English   中英

這兩個指針如何具有相同的值?

[英]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為好。

這意味着xptryptr都指向相同的數據。

您的最后一條語句( *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 xpntrypntr指向的總和。因此x就是13 + 13 = 26 ←這就是您的26來自何處!

    *ypntr = *xpntr + *ypntr;

打印xpntrypntr指向的位置的值。

    cout << x << " " << y << " " << *xpntr << " " << *ypntr << endl;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM