[英]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.