字元型指標變數與字元陣列的區別
:(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的指標陣列,每個元素都為指向指標變數的指標。字元型指標就是儲存字元型資料記憶體單元的位址。字元陣列,是將字串放到為陣列分配的儲存空間去 字元型指標變數,是將字串存放到記憶體,然後將字串的記憶體起始位址送到指標變數中 字元陣列與指標...