我是 C 語言的新手,正在學習它。我正在學習指標。我對以下程式有點困惑。
我的問題是甚至有可能得到結果 B嗎?我正在改變a的值,但相應地,b的值由于指標而改變,我總是得到結果 A。我怎樣才能得到結果 B?任何幫助將不勝感激。謝謝 :)
#include <stdio.h>
void increment(int value) {
value ;
}
int main() {
int a = 6;
int *b = &a;
increment(a);
if(a == *b) {
printf("outcome A");
} else if(a > *b) {
printf("outcome B");
} else {
printf("outcome C");
} return 0;
}
uj5u.com熱心網友回復:
指標是許多編程語言中存盤記憶體地址的物件。指標參考記憶體中的某個位置,獲取存盤在該位置的值稱為取消參考指標
看看這個代碼片段
#include <stdio.h>
int main() {
int a = 6;
int *b = &a;
printf("a = %d b = %p *b = %d\n", a, (void*)b, *b);
a = 20;
printf("a = %d b = %p *b = %d\n", a, (void*)b, *b);
}
輸出:
a = 6 b = 0x7fff3ead8d6c *b = 6
a = 20 b = 0x7fff3ead8d6c *b = 20
如您所見,為 a 分配一個新值并沒有改變 b 的值。但是,它確實改變了 b 指向的值。也就是說,b 沒有改變,而 *b 改變了。
uj5u.com熱心網友回復:
你沒有改變 的值a,但是 的副本a,你改變了value。
一旦你初始化b=&a并且不改變b(等于地址a)的值,所有的時間a == *b都將是真實的。
您可能想要做的是:
void increment(int *value) {
(*value) ;
}
并這樣稱呼它:increment(&a)。在 habing 增加之后,b=&a仍然是正確的,但是你改變了a.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430750.html
