網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   一般軟體與網路使用討論 (https://www.domainclub.org/forumdisplay.php?f=43)
-   -   有關遞增的值的問題 (https://www.domainclub.org/showthread.php?t=36206)

哈啦 2014-03-06 06:10 PM

有關遞增的值的問題
 
第一個是基本的遞增函數,如果使用者輸入6,則因為x++,輸出的答案是7:

#include <stdio.h>

int main(void)
{

int x;
printf("enter a number: \n");
scanf("%d",&x);
x=x++;

printf("%d",x);

return 0;
}


但改成如下比較複雜的程式碼,算出來之後,本來是預期如果使用者輸入6,因為x++,答案會是7,但結果輸出的答案還是6?

#include <stdio.h>

int func(int x);

int main(void)
{
int y,z;
printf("enter a number: \n");
scanf("%d",&y);
z=func(y);
printf("%d",z);

return 0;
}

int func(int x)
{
x++;/*非常奇怪的是,這裡無論改什成什麼,例如x=x+1 x=x*2 x=x-2 答案全是原先輸入的那個數字6,也就是說,這個x值傳回去還是原值。但唯有一個例外,就是x=x/2,除數,則它會有改變,例如輸入6,則本程式出來的答案就是3。怎會這樣?*/
}

robowang 2014-03-06 07:27 PM

func 最後要加上 return x;

哈啦 2014-03-06 07:52 PM

引用:

作者: robowang (文章 190489)
func 最後要加上 return x;

~yes

原來如此。但為何如果是x=x/2; 不用加return x;也有正確答案呢?

robowang 2014-03-06 08:06 PM

你沒指定回傳值, 則 z 的值將是『不確定』的,
你得到的所謂"正確值", 其實是恰好而已
使用別的編譯器, 或使用不同的編譯選項, 都可能得到不同的結果

哈啦 2014-03-06 08:10 PM

引用:

作者: robowang (文章 190491)
你沒指定回傳值, 則 z 的值將是『不確定』的,
你得到的所謂"正確值", 其實是恰好而已
使用別的編譯器, 或使用不同的編譯選項, 都可能得到不同的結果

原來如此。many thanks!:bow


所有時間均為 +8。現在的時間是 08:17 PM

Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.