我有兩個文件,main.c
和main2.c
。我的經驗告訴我他們應該完全一樣,但他們不應該。如何理解函數中的指針
main.c
在main
例程之外聲明瞭一個全局變量。然後,在main
例程中,聲明一個指針並將其定義爲指向該全局變量。全局變量被改變,並且局部變量的值被打印到屏幕上。
main2.c
也是這樣,但將局部到全局的定義和全局變量值的變化卷積到另一個函數change_number
。
我不明白爲什麼這種方法失敗。 main.c
和main2.c
是幾個小時的錯誤修復,文檔和教程閱讀的結果,顯然,閱讀這裏SO。
我對指針的理解是我稱之爲基礎的:它指向一個內存位置。在常規變量的情況下,指針將指向該變量的內存位置。幾個指針可以指向同一個內存位置,但是一個指針不能指向多個位置。
在C中沒有傳遞引用的東西,但據我所知,這不是通過引用傳遞的,因爲所有變量和指針都是在函數外部定義的。請賜教。
//File: main.c
#include <stdio.h>
#include <stdlib.h>
int global_number;
int main() {
int *local_number;
local_number = &global_number;
global_number = 9;
printf("local_number = %d\n", *local_number);
return 0;
}
輸出:「local_number = 9」。這是預期的結果。
//File: main2.c
#include <stdio.h>
#include <stdlib.h>
int global_number;
void change_number(int *number) {
number = &global_number;
global_number = 9;
}
int main() {
int *local_number;
change_number(local_number);
printf("local_number = %d\n", *local_number);
return 0;
}
輸出:「分段錯誤」。這顯然不是有意的。代碼運行良好,直到printf()。
C使用通逐值。 'change_number'中的'number'是與main中的'local_number'不同的變量。 – 2014-12-07 02:16:18
[變量在函數中未被調用方看到的可能的重複?](http://stackoverflow.com/questions/27320240/variable-changed-in-function-not-seen-by-caller) – 2014-12-07 02:17:37
這一行:number = &global_number;應該是:* number =&global_number I.E. number是一個指向local_number的指針。代碼需要設置數值指針所指向的值 – user3629249 2014-12-07 02:39:45