簡體   English   中英

我正在嘗試對 C++ 中的兩個指針的值進行算術運算,但它有時有效,有時失敗。 努力在網上尋找解釋

[英]I'm Trying to do Arithmetic on the Value of Two Pointers in C++ but it Sometimes Works and Sometimes Fails. Struggling to Find Explanations Online

由於問題的基本性,我感到很傻,但是使用我對指針的基本理解,我的程序意外地執行了,我不明白為什么。

#include <stdio.h>

void update(int *a,int *b) {
    
    *a = *b + *a;
    *b = (*a - *b);
}

int main() {

    int a, b;
    int *pa = &a, *pb = &b;
    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);
    return 0;
}

因此,指針指向 memory 地址。 如果我要對指針本身進行算術運算,我會更改地址位置。 但是 *(指針變量)將是 memory 地址處的值。 假設 (*a + *b) = *a 之類的算術與 (a + b) = a 的工作原理基本相同,這是錯誤的嗎? 我認為我是正確的,因為 *a = (*b + *a) 按照我在代碼中的預期工作。

所以我很困惑,因為 *b = (*a - *b) 似乎總是改變 *b = *a 而不是實際的減法。 輸入 5 和 2 使 *b = 5 如果發生減法,這將沒有意義。 輸入:6,5 輸出:6 輸入:2, 1 輸出:2

此外,我已經在黑客等級和 Visual Studio 代碼中測試了代碼,並且我在兩者中都得到了相同的 *b 結果。 “指針值的算術運算”、“如何在 memory 地址 c++ 上更改值”和“你能對指針 c++ 的值進行數學運算”的熱門搜索結果要么不能解決我的問題(盡管它們可以解決我的問題)問題,但我只是沒有建立聯系。)

如果有人可以解釋為什么我會為 *b 得到 output,這是出乎意料的,如果對 *b 和 *a 進行算術運算實際上按我認為應該的方式工作,以及是否有更好或更有效的方法來做我想做的事情'我試圖完成。 我真的很感謝任何回答的人。 謝謝

這與它們是指針無關,而是與正在完成的操作有關。

*a = *b + *a;
*b = (*a - *b);

是按順序完成的,因此在計算*b之前會更改*a值。
我假設你期待類似的東西

int a_before = *a;
*a = *b + *a;
*b = (a_before - *b);

暫無
暫無

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

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