2014-09-01 26 views
3

我有以下情況:的函數的返回值如何表現不同變量和數組

char *func1() 
{ 
    char val[]="This is test!"; 
    return val; 
} 

現在在這裏,我知道char val[]是本地陣列功能,它不會再用作函數返回。

現在爲什麼這不適用於以下情況?

char func2() 
{ 
    char val='C'; 
    return val; 
} 

做了測試

int main() 
{ 
    printf("output1 :: %s \n",func1()); // print garbage characters 
    printf("output2 :: %c \n",func2()); // print `C` 
    return 0; 
} 
+1

因爲'char func2()'返回函數局部變量'var'的*副本*。 – juanchopanza 2014-09-01 12:32:06

回答

5

C按價值返回。當您在func2中編寫return val;時,會返回val的副本。原來val被破壞並不重要,您仍然擁有該副本。

func1中,您返回指向val的指針副本。這與val的副本不一樣。 func1中沒有val的副本。數組和指針是不同的;指針與它們指向的內容沒有任何一致性。一旦val被銷燬,您不能再使用指向它的指針。

+0

行得通。謝謝 – Random 2014-09-01 12:40:22

2

func2返回變量char val副本的功能。