字串常量指標與字元陣列的區別

2021-05-28 08:27:35 字數 1416 閱讀 4558

**:

陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。指標可以隨時指向任意型別的記憶體塊。

(1) 修改內容上的差別

char a = "hello";

a[0]     = 'x';

char *p- = "world";//注意p指向常量字串

p[0]     = 'x';     //編譯器不能發現該錯誤,執行時錯誤

(2) 用運算子sizeof可以計算出陣列的容量(位元組數)。sizeof(p),p為指標得到的是乙個指標變數的位元組數,而不是p所指的記憶體容量。c++/c語言沒有辦法知道指標所指的記憶體容量,除非在申請記憶體時記住它。注意當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。

char a = "hello world";

char *p = a;

cout<< sizeof(a) << endl;      //12位元組

cout<< sizeof(p) << endl;      //4位元組

計算陣列和指標的記憶體容量

void func(char a[100])

sizeof  指標 陣列

-------------------------------------------

char p;   // 編譯不過

char p[0];  // sizeof(p) = 0

char p[8];  // sizeof(p) = 8

char * p = malloc (10);  // sizeof(p) = 4

用運算子sizeof可以計算出陣列的容量(位元組數),但是計算不出指標指向空間的容量,只能計算出指標變數的空間容量(4位元組)

指標就是指標,成不了陣列

《c陷阱和缺陷》p41

----------------------------------------------

在c語言中,我們沒有辦法可以將乙個陣列作為函式引數直接傳遞。如果我們使用陣列名作為引數,那麼陣列名會立即被轉換為指向該陣列第1個元素的指標。例如,下面的語句:

char hello = "hello";

宣告了hello是乙個字元陣列。如果將該陣列作為引數傳遞給乙個函式,

printf ("%s\n", hello);

實際上與將該陣列第1個元素的位址作為引數傳遞給函式的作用完全等效,即:

printf ("%s\n", &hello[0]);

因此,將陣列作為函式引數毫無意義。所以,c語言中會自動地將作為引數的陣列宣告轉換為相應的指標宣告。也就是說,像這樣的寫法:

int strlen (char s)

與下面的寫法完全相同:

int strlen (char *s)

字元陣列與字元指標的區別以及字串常量的修改

字元陣列 char string 20 hello zhao 字元指標char str hello zhao 把字串常量的首位址賦給了這個字元指標str 區別 字元陣列是在記憶體中開了一段空間用來存放 hello zhao 如下所示 he lloz hao 0 string是陣列名,其實乙個常量 或...

字元陣列,字元指標,字串常量

一 字串可以賦值給字元指標變數 char p hello 其實這裡分配了常量,即const,如果不讓p指向別的位址就無法修改。char q world cout p q 1.字串常量 hello 出現在乙個表示式中時,hello 表示式使用的值就是這些字元所儲存的位址 在常量區 而不是這些字元本身。...

字串陣列與字串指標的區別

字元指標變數和字元陣列的區別 簡單說一下 字串陣列是用來存放字串的陣列,在記憶體中佔一段連續的單元。所佔記憶體存放的是字串。定義方法為 char a n n為常量表示式,可初始化。字元指標是指向字元的指標,所佔記憶體單元存放的是所指字元的記憶體單元。定義方法為 char p 完整的解答 1 字元陣列...