2014-06-16 214 views
-3

以下哪些代碼是合適的?爲什麼?傳遞地址作爲函數參數

代碼1:

void fun(int *p) 
{ 
    *p=200; 
} 

main(){ 
int *i_ptr; 
fun(i_ptr); 
printf("%d", *i_ptr); 
} 

代碼2:

void fun(int *p) 
{ 
    *p=200; 
} 

main(){ 
int i; 
fun(&i); 
printf("%d", i); 
} 

是好的傳遞指針的地址?

+1

好的,通過什麼指針的地址?你的例子都不通過指針的地址。 –

+0

當你編譯和運行它們時會發生什麼? – Lundin

回答

1

你問:

哪個這些代碼是適當的,爲什麼呢?

由於i_ptr尚未初始化爲指向有效內存,所以第一個將導致未定義的行爲。

你可以把它改成:

int main(){ 
    int i; 
    int *i_ptr = &i; 
    fun(i_ptr); 
    printf("%d", *i_ptr); 
} 

,這將是確定。

順便說一下,我還加入了int作爲main的返回類型。

你還問:

是好的傳遞指針的地址?

我很清楚這個問題與您發佈的代碼有關。

+1

這是如何回答這個問題的? –