char a[10];
怎麼給這個陣列賦值呢?
1、定義的時候直接用字串賦值
char a[10]="hello";
注意:不能先定義再給它賦值,如char a[10]; a[10]="hello";這樣是錯誤的!
2、對陣列中字元逐個賦值
char a[10]=;
3、利用strcpy
char a[10]; strcpy(a, "hello");
易錯情況:
1、char a[10]; a[10]="hello";//乙個字元怎麼能容納乙個字串?況且a[10]也是不存在的!
2、char a[10]; a="hello";//這種情況容易出現,a雖然是指標,但是它已經指向在堆疊中分配的10個字元空間,現在這個情況a又指向資料區中的hello常量,這裡的指標a出現混亂,不允許!
還有:不能使用關係運算子「==」來比較兩個字串,只能用strcmp() 函式來處理。
c語言的運算子根本無法操作字串。在c語言中把字串當作陣列來處理,因此,對字串的限制方式和對陣列的一樣,特別是,它們都不能用c語言的運算子進行複製和比較操作。
直接嘗試對字串進行複製或比較操作會失敗。例如,假定str1和str2有如下宣告:
char str1[10], str2[10];
利用=運算子來把字串複製到字元陣列中是不可能的:
str1 = "abc"; /*** wrong ***/
str2 = str1; /*** wrong ***/
c語言把這些語句解釋為乙個指標與另乙個指標之間的(非法的)賦值運算。但是,使用=初始化字元陣列是合法的:
char str1[10] = "abc";
這是因為在宣告中,=不是賦值運算子。
試圖使用關係運算子或判等運算子來比較字串是合法的,但不會產生預期的結果:
if (str1==str2) ... /*** wrong ***/
這條語句把str1和str2作為指標來進行比較,而不是比較兩個陣列的內容。因為str1和str2有不同的位址,所以表示式str1 == str2的值一定為0
陣列的初始化與賦值
以乙個整型陣列和乙個char型陣列為例 int a 2 char s 5 這樣初始化時可以的,使用cout輸出s陣列的時候,不報錯,但直接使用s這個陣列名輸出缺少了乙個適當的 0 結尾 對比上面的初始化,只能對陣列的元素賦值,而不能用賦值語句對整個陣列賦值 c 程式設計 譚浩強 149頁 例如下面是...
賦值與初始化
1 賦值 賦值 是給變數指定乙個值或者是改變乙個變數的值,且 必須是在該變數型別所能表達的範圍之內。int speed 30 標準形式 variable expression 變數型別 變數名 表示式 2 初始化 區域性變數 必須顯示的進行初始化。例項變數 類變數 編譯器可以自動對它們進行初始化。b...
Verilog陣列初始化賦值
verilog陣列表示及初始化,以三維陣列為例,二維及一維應該類似 reg 19 0 array1 0 7 0 15 0 8 3維陣列,用來儲存梯度直方圖 always posedge clk or negedge rst n begin if rst n begin array1 0 7 0 15...