我知道爲什麼這個工程:簡單的指針的指針
#include <stdio.h>
void cool_number(int **number) {
int value = 42;
int *p = &value;
*number = p;
}
int main() {
int *number;
cool_number(&number);
printf("number is %d\n", *number);
return 0;
}
我不明白的是爲什麼這不(在我的機器它打印3700
或類似的東西)。
#include <stdio.h>
void cool_number(int **number) {
int value = 42;
int *p = &value;
int **x = &p;
number = x;
}
int main() {
int *number;
cool_number(&number);
printf("number is %d\n", *number);
return 0;
}
爲什麼不相等?
你的第一個例子不 「工作」。返回局部變量的地址是未定義的行爲。這是一個錯誤,只有[出現意外工作](http://stackoverflow.com/a/6445794/445976)。 – Blastfurnace
這是真的,但它與被問到的問題也不是完全相關的,這就是「爲什麼這兩個函數實現會做不同的事情」。即使OP修復了這個問題,他們仍然會發現這兩個功能的行爲不同,原來的問題仍然存在。 – aroth
@aroth:我認爲試圖推斷出有未定義行爲的代碼是浪費時間。首先解決這個問題,然後再詢問通過值與參考值的關係。即使他糾正了通過這個問題的參數仍然可能是「爲什麼這兩個函數實現做不同的事情」。 – Blastfurnace