相同點
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...