#include
char
*tochinese
(char c)
;return num[c-
'0']
;//num是區域性變數,函式結束時,記憶體釋放,會返回空
}int
main()
#include
#include
#include
char
*tochinese
(char c)
;char
* s =
malloc(5
);strcpy
(s, num[c -
'0']);
return s;
}int
main()
#include
char
*returnstr()
intmain()
因為"hello world!"是乙個字串常量,存放在唯讀資料段,把該字串常量存放的唯讀資料段的首位址賦值給了指標,所以returnstr函式退出時,該該字串常量所在記憶體不會被**,故能夠通過指標順利無誤的訪問。
#include
char
*returnstr()
intmain()
"hello world!"是區域性變數存放在棧中。當returnstr函式退出時,棧要清空,區域性變數的記憶體也被清空了,所以這時的函式返回的是乙個已被釋放的記憶體位址,所以有可能列印出來的是亂碼。
int
func()
int*
func()
#include
char
*returnstr()
intmain()
int
*func
(void
)
char
*tochinese
(char c)
;char
* s =
malloc(5
);strcpy
(s, num[c -
'0']);
return s;
}
這裡有個問題,malloc申請的動態記憶體,不態好釋放(free釋放) C語言 返回區域性變數
一般的來說,函式是可以返回區域性變數的。區域性變數的作用域只在函式內部,在函式返回後,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址 指標 的話,程式執行後會出錯。因為函式只是把指標複製後返回了,但是指標指向的內容已經被...
C 函式返回區域性變數
原因 返回值是拷貝值,區域性變數的作用域為函式內部,函式執行結束,棧上的區域性變數會銷毀,記憶體釋放。可返回的區域性變數 1.返回區域性變數本身 int sum int a,int b 2.常量 char returnvalue warning deprecatedconversion from s...
C 函式返回區域性變數
目錄2 可返回的區域性變數 示例 int get 或 char getmemory void 示例 int sum int a,int b 常量 char getmemory void 示例 const char getmemory void 或者int returnvalue return val...