字元型指標變數與字元陣列的區別

2021-09-01 19:06:16 字數 1531 閱讀 1806

字元型指標變數與字元陣列的區別

:(1)分配記憶體

假設有字元型指標變數與字元陣列如下:

char *p ,s[10];

編譯器為字元陣列s分配

10個位元組記憶體,用於存放

10個字元。而編譯器只為指標變數p分配

4個位元組記憶體。

(2)初始化賦值含義

字元陣列與字元指標的初始化賦值形式相同,但其含義不同。例如:

char s[ ] ="i am a student ! " ;

char *p="you are a student too ! " ;

對於字元陣列是將字串放到為陣列分配的儲存空間去,而對於字元指標是先將字串存放到記憶體,然後將存放字串的記憶體起始位址送到指標p中。

(3)賦值方式

字元陣列只能對其元素逐個賦值,而不能將字串賦給字元陣列名。對於字元指標變數,

s="i love china! "; //

字元陣列名

s不能直接賦值,該語句是錯誤的。

p="i love china! "; //

指標變數

p可以直接賦字串位址,語句正確

下面這個例子:編譯報錯:

error c2440: 「=」:

無法從「const char [7]」

轉換為「char [30]」

#include

#include

using namespace std;

void main()

但是對字元陣列初始化時可以:

char s="hello world"; //

正確char *p=0;

p="hello world";

(4)輸入方式

可將字串直接輸入字元陣列,而不能將字串直接輸入指標變數。但可將指標變數所指字串直接輸出。

例如:scanf("%s",s); //

正確scanf("%s",p); //錯誤

例如下程式:

#include

int main()

{char *a;

//int i;

//for(i=0;i<3;i++)

scanf("%s",a);

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

return 0;

在linux

下能編譯執行

但執行時提示

segmentation fault

原因是定義了乙個字元指標,但指標沒有確定位址,所以出現了段錯誤(即記憶體空間越界)。

printf("%s",p);//

正確(5)值的改變

s=s+5; //

錯誤p=s+5;//

正確

字元型指標變數與字元陣列的區別

1 分配記憶體 設有定義字元型指標變數與字元陣列的語句如下 char pc str 100 則系統將為字元陣列str分配100個位元組的記憶體單元,用於存放100個字元。而系統只為指標變數pc分配4個儲存單元,用於存放乙個記憶體單元的位址。2 初始化賦值含義 字元陣列與字元指標變數的初始化賦值形式相...

字元型指標變數與字元陣列的區別

1 分配記憶體 設有定義字元型指標變數與字元陣列的語句如下 char pc str 100 則系統將為字元陣列str分配100個位元組的記憶體單元,用於存放100個字元。而系統只為指標變數pc分配4個儲存單元,用於存放乙個記憶體單元的位址。2 初始化賦值含義 字元陣列與字元指標變數的初始化賦值形式相...

字元陣列與字元型指標變數

int p 5 由於 的優先順序高。所以p先與 5 結合,p是長度為5的指標陣列,每個元素都為指向指標變數的指標。字元型指標就是儲存字元型資料記憶體單元的位址。字元陣列,是將字串放到為陣列分配的儲存空間去 字元型指標變數,是將字串存放到記憶體,然後將字串的記憶體起始位址送到指標變數中 字元陣列與指標...