2014-03-31 50 views
2
#include<stdio.h> 
int add(int,int); 

main() 
{ 
     int a=2,b=3; 
     printf("%d %d %d",a,b,add(a,b)); 
     getch(); 
} 

int add(int a,int b) 
{ 
    int c; 
    c=a+b;  
} 

那麼好吧這給了我輸出2 3 5 ..但下面的程序傳遞函數參數和返回聲明

#include<stdio.h> 

int add(int,int); 

main() 
{ 
     int a=2,b=3; 
     printf("%d %d %d",a,b,add(a,b)); 
     getch(); 
} 

int add(int a,int b) 
{ 
    int c; 
    c=a+b; 
    c=0;  
} 

不過它給2 3 5作爲輸出..因爲我們沒有return聲明最後陳述c=0不初始化。它應該給2 3 0,但它只給出2 3 5

+2

[This](http://stackoverflow.com/questions/1610030/why-can-you-return-from-a-non-void-function-without -returning-a-value-without-pr)解釋它。 –

回答

5

這是未定義的行爲,任何事情都可能發生,你不能依賴它。

可能發生的是,在功能add()中,計算c的值,並將其保留在堆棧中的printf()調用中,打印該棧的特定地址中的內容。再一次,你不能依賴未定義的行爲。

-1

這是一個非常好的問題。

在函數內的add() 表達

c=a+b; 

評價 在該表達式中的右手側,必須首先計算。 因此,它返回a + b的值,並且該值存儲在您的返回寄存器中,並且該值最終存儲在c中。

在接下來的表達式

c=0; 

它僅僅是初始化的0到c的值。 它不需要返回任何值。 所以返回寄存器的值仍然是5.

+0

非常感謝你....現在我解開了這個疑惑..再次感謝Akshay – user3479901

+0

沒問題。如果我的回答幫助了你,請接受它:) –