字元陣列建成字串,由於字串的應用及其廣泛,而且在c語言中目前只有char這一變數型別既可以輸出數字又可以輸出字元,所以字元陣列的變數型別也就只有char了。
首先要注意:字元陣列即字串,說白了就是由乙個個字元組成的。所以不管你輸入的字串裡面有數字或是字元,儲存的形式都是asc數字!!
以下的所有方法都是以asc數字儲存的型別,若想以原數字儲存,則**為:
char a[4];
scanf("%d%d%d%d", &a[0],&a[1],&a[2],&a[3]);
並且注意輸入的時候要用空格隔開。
方法一:大括號型
特點:1.大括號內從左至右的元素與陣列中的「序號」一一對應
char a[4] = ; => char a[4];
a[0] = 'r';
a[1] = 'o';
a[2] = 'c' ;
a[3] = 'k';`
2.只能如上述例子的樣式,不能像這樣:
char a[4];
a[0] = ;
a[1] = ; <== **錯誤****
a[2] = ;
a[3] = ; `
為什麼不能這樣?根據第乙個特點,a[0] = 就表示其他的a[1] a[2] a[3] a[4] 儲存的都是0。
方法二:直接命名型
特點:1.將字元陣列視為變數,命名規則與命名變數的規則一樣
char a[5] = "rock"; => char a[5] = ;
2.可以對每乙個元素單獨命名
char a[5] ;
a[0] = 'r'
a[1] = 'o';
a[2] = 'c';
a[3] = 'k';
a[4] = 0; => char a[5] = "rock";
`
千萬不要這樣:一來就直接對a[0]命名是錯誤的
char a[0] = 'r';
a[1] = 'o';
a[2] = 'c';
a[3] = 'k';
a[4] = 0;`
總結起來就是下面這三種初始化方法:
char a[5] = ; <=> char a[4]; <=> char a[5] = "rock";
a[0] = 'r';
a[1] = 'o';
a[2] = 'c' ;
a[3] = 'k';`
a[4] = 0;
當然,為了避免陣列的越界,程式設計師也經常在陣列名後面不加下標直接輸入字串,如:
char name = "rock";
printf("一共有%d個位元組", sizeof(name));
編譯結果為:一共有5個位元組
當然,也可以這樣:
char name = ;
顯然也有5個位元組
我們知道電腦在儲存字元陣列的時候會在末尾多儲存上乙個結束字元,也就是數字0。按照常理,上面兩種方法是等價的,即
char name = "rock"; == char name = ;
但是,當你用大括號的方式像下面這樣輸入時:
char name = ;
即你把最後的結束字元0給去掉了,編譯結果為:一共有4個位元組。但不會出錯,這就很奇怪了。
但是要注意:不加下標的寫法只能直接命名,不能像這樣:
char a; char a;
scanf("%s",a); gets(a);
這樣的**是錯誤的,必須在陣列名後直接命名。 字元陣列初始化
上週實習做fcitx輸入法時碰到乙個字元陣列的問題,因基礎的不紮實,導致經除錯了幾分鐘才發現問題所在。字元陣列初始化常見有兩種格式 char arr test 10 和char arr test 11 helloworld 為什麼是一樣的內容,兩個陣列的長度不一樣,乙個是10,乙個是11,因為預設在...
字元陣列的初始化
有關字元陣列的初始化的若干問題 一 注意事項 1.字元陣列的初始化,初始化時賦予的自然是字元 要加單引號 2.賦予字元也可以通過賦予相應字元的ascii碼 去掉單引號 或賦予字串 只加雙引號 來進行。3.對字元陣列完全不進行初始化,則各元素隨機。4.對字元陣列進行不完全初始化,則從低位址 a i 中...
關於字元陣列的初始化
字元陣列可以在定義時進行初始化.有兩種初始化方法.方法1 逐個字元賦給陣列中各元素.這種方法最容易理解.例如 char c 5 把5個字元分別賦給c 0 至c 4 以下是幾點說明 1 如果大括號內提供的初值個數 即字元個數 大於陣列長度,則編譯時將出錯.如果初值個數小於陣列長度,則只將這些字元賦給前...