在這裏,在函數返回值是我的代碼:使用指針在C
#include <stdio.h>
//returning a pointer
int *fun()
{
int i = 10;
//printf ("%u\n",i);
//printf ("%u\n",&i);
return &i;
}
int main()
{
int *p;
p = fun();
printf ("p = %u\n", p);
printf ("i = %u \n",*p);
return 0;
}
如果我在函數fun刪除評論,那麼第二個printf在主顯示10作爲輸出。否則會顯示垃圾值。任何想法?
而你想知道的是什麼? 'i'位於堆棧上,所以當函數返回'&i'時,'i'的內存位置變爲無效。我想你想說:'int * i = malloc(sizeof(int)); * i = 10;返回i;' – clcto
同樣在你的printf格式字符串中,你傳遞了%u,這意味着無符號,但給它一個int,這是有符號的 - 將導致未定義的行爲。 –
我明白爲什麼* p顯示垃圾值,我不明白的是爲什麼在函數fun中取消printf的註釋,導致第二個printf在main中打印正確的輸出10 ..! – whizvids