我讀函數調用之間的return
值
並用下面的代碼片段嘗試:什麼是函數返回值的生命週期?
/* file structaddr.c */
#include <stdio.h>
#define MSIZE 10
struct simple
{
char c_str[MSIZE];
};
struct simple xprint(void)
{
struct simple ret = { "Morning !" };
return ret;
}
int main(void)
{
printf("Good %s\n", xprint().c_str);
return 0;
}
的代碼是沒有錯誤和警告編譯。
使用測試GCC 4.4.3(Ubuntu 4.4.3-4ubuntu5.1)和Visual C++編譯器。
gcc -m32 -std=c99 -Wall -o test structaddr.c
cl -W3 -Zi -GS -TC -Fetest structaddr.c
輸出:
早安!
我對結果有點困惑。
該代碼是否正確寫入?
我的問題:
功能
return
值的可見性是什麼(陣列從上面的例子中一struct
),以及如何正確地訪問它們?哪裏結束
return
價值的壽命?
返回值是一個臨時值。它在使用後被丟棄。如果你沒有把它存儲到一個變量中,那麼在你第一次引用它之後它就消失了。 – 2013-07-27 20:20:08
@JoachimPileborg是的,我剛剛在你的評論之前刪除了我的評論。 :) –
@boleto你爲什麼困惑?你期望別的嗎? – Xaqq