字串陣列char 和字串指標char 的討論

2021-07-07 09:35:50 字數 1590 閱讀 8500

相同點

1.char *a ,和char a在作為形參的時候完全相同。

2.在初始化時,都可以使用常量字串,

區別1.內容位址不同

char * a = 「abcd」;

此時「abcd」存放在常量區,然後在棧上分配記憶體給a,並指向「abcd」在常量區的首位址。對於指標本身a來說,它是可變的,允許修改,可以指向其他的位址。但是a所指向的內容為常量,不可以改變它。

char a = 「abcd」;

此時」abcd」存放在棧上,可以訪問和修改,陣列名a對應著(而不是指向)一塊記憶體,其位址與容量在生命週期內保持不變,只有陣列的內容可以改變。

2.賦值時刻

char * a = 「abcd」; 編譯時就確定了

char a = 「abcd」; 執行時確定

3.賦值方式

這個其實是第一條的乙個細化

對於字元陣列char a[10],a = 「i love you」;是不可以的,a代表了首位址,位址是確定的。

對於字元指標char * a, a = 「i love you」;是可以的,相當於指向另乙個常量的首位址

4.初始化方式

對於字元指標:

1,char * a = 「i love you」;

2,char *a; a = 「i love you」

對於字元陣列:

1,char a = 「i love you」;

內容複製和比較

陣列與陣列

char a = 「hello」;

char b[10];

strcpy(b,a); //而不是b = a;

if(strcmp(b,a) == 0); //不是if(b==a)

指標和陣列

int len = strlen(a);

char * p = (char * )malloc(sizeof(char ) *(len +1)) ; //先要申請記憶體空間,再複製

strcpy(p,a); //不是p = a;

if(strcmp(b,a) == 0);

注意事項

1,字元陣列的長度

char str = ;

char str = 「i love you」;

是等價的。

但是char str = ;就和上面的不同了,因為字元陣列並不要求它的最後乙個字元為』\0』,兩者長度上相差1。

2,sizeof()的不同

對於字元陣列char str[10],sizeof(str)等於陣列的容量(位元組)。

sizeof(str) = 10;

char * p = str;

sizeof(p) = 4;得到是指標p本身的位元組數,相當於sizeof(char *)

特別需要注意的是:

當陣列作為函式引數傳遞的時候,陣列都作為指標來看待

void fun(char str[100])

字串 字元陣列 char指標 ???

最近軒少閒來無事,乘爽妹子,華晨宇,楊紫這些頂流明星攢了一波大瓜,讓微博程式設計師痛苦加班之際,又拿起c 研究了一番,對字串略有所感,在此記錄一下。大部分學c c 的人都是從 printf hello,world cout hello,world endl 開始。hello,world 是乙個字串常...

字串char 和字串陣列char 的區別

字串char char str1 abcde 其實上面的char str1是字串常量,儲存在靜態儲存區,是唯讀的,也就是說它是const char str1 更好的表達它本身的意思。str1是乙個變數,代表的意思就是字串的第乙個字元的值 str1 可行 str1 2 f 不可行假如 char str...

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...