char* fun1()
char* fun2()
先看上面的** fun1 和 fun2那個會出問題?
fun1卻是正確的,為啥呢?
我們都知道當函式結束時返回值被儲存在棧內而區域性變數都被銷毀了
而上面fun1和fun2返回的都是乙個char*指標---也就是乙個記憶體位址
fun2在函式結束後,返回的位址是char a[128];這個區域性變數的位址
但是a變數已經實際內容已經被清空了,所以列印這個位址遇到一串隨機數。或者空就不奇怪了。
那為什麼fun1的列印是正確的?
a = "c語言的那些小坑";
就應為這個字串是乙個常量所以不再銷毀的範圍內
所以fun1函式結束後返回的a變數的位址內容任然存在
所以printf("坑1%s \r\n", fun1()); 就沒問題。
printf("坑2%s \r\n", fun2());就有問題
C語言裡碰到的坑
1 關於連續比較,可正常編譯執行,但結果不對,實際執行的與數學操作不符 int n 5 if 1 n 10 執行的操作為先判斷1 n是否為真,將n賦值為0或1,再進行n 10的操作 2 關於math函式裡的pow,pow double,double 使用時接收pow的變數必須是double型別變數。...
變數 常量 C語言的常量和變數
常量與變數 1.常量是指值不會改變的量 1 常量不能寫在賦值語句的左邊。2 常量不能進行自加 自減運算。2.變數是指在程式執行過程中其值可以發生改變的量 1 變數需占用一定數量的記憶體空間,而常量不需要。2 區域性變數若沒有宣告為靜態變數,那麼其初值是隨機的。3 不同型別的變數可以放在一起參與運算,...
C語言的常量和變數
基本資料型別量,按照取值能否改變分為常量和變數。一 常量 常量是程式執行過程中,其值不發生改變的量。在程式中,常量可以不經說明直接引用。1.常量定義方式 1 使用 const定義 const 資料型別 常量名 const定義的是值不允許改變的常變數。2 巨集定義 define 識別符號 常量值 符號...