char 和char 申請空間的區別

2021-10-03 07:10:54 字數 499 閱讀 9309

資料結構助教時同學反饋的**:

#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定義的是乙個陣列,在分配記憶體時,會自動給它分配四個位元組的位址,並且會進行乙份拷貝工作,此時分配是在棧區進行的,是...