資料結構助教時同學反饋的**:
#include
#include
#include
void
func
(char
**s)
intmain()
這樣寫邏輯上看是正確的,然而實際上輸出是錯的,除錯發現,在func函式中,p被正確賦予了a陣列的位址,但在出函式後,這塊位址的值被改變了。原因是char申請的函式棧上的空間來存放「hello」字元,改為char *a = "hello"
後,執行正確,原因是char *在建立變數時,先在文字常量區存放字串常量「hello」,然後在函式棧區申請乙個位址存放變數a,變數a即為這個文字常量區中「hello」的位址,將這個位址賦給p,p即指向文字常量區,在退出函式後空間不會被釋放。
另乙個解決方法是在前面加static,static char a="hello"
,這樣存在全域性資料區,也不會被釋放。
char 及char 申請記憶體空間區別
在程式設計師面試寶典中看到這兩種申請記憶體方式,瞬間發覺自己還是too young too simply 1 char stra char str hello word return str 2 char stra char str hello word return str 這兩種寫法具有很大的區...
char 和char 的區別
1 char是乙個陣列定義,char 是指標定義 也稱char為靜態陣列,char 為動態陣列 2 指標和陣列的區別 1 指標和陣列的分配 陣列是開闢一塊連續的記憶體空間,陣列本身的識別符號 也就是通常所說的陣列名 代表整個陣列,可以使用sizeof來獲得陣列所佔據記憶體空間的大小 注意,不是陣列元...
char 和char 的區別
char c abc c 0 t char c1 def c1 0 t err 首先c1是乙個指標,它只是指向 def 這個記憶體塊。而 abc 是乙個常量區,不可以對其進行更改。而c定義的是乙個陣列,在分配記憶體時,會自動給它分配四個位元組的位址,並且會進行乙份拷貝工作,此時分配是在棧區進行的,是...