字元陣列可以在定義時進行初始化.有兩種初始化方法.
方法1:逐個字元賦給陣列中各元素.
這種方法最容易理解.例如:
char c[5]=;
把5個字元分別賦給c[0]至c[4].以下是幾點說明
:
(1)
如果大括號內提供的初值個數(即字元個數)大於陣列長度,則編譯時將出錯.如果初值個數小於陣列長度,則只將這些字元賦給前面的陣列元素,其餘的元素自動賦
空字元
(即'\0').例如:
引用:
char c[10]=;
陣列狀態如下所示:
引用:
c[0]=h , c[1]=e , c[2]=l , c[3]=l , c[4]=o
c[5]=\0, c[6]=\0, c[7]=\0, c[8]=\0, c[9]=\0
(2)
如果提供的初值個數與預定的陣列長度相同,在定義時可以省略陣列長度,系統會自動根據初值字元個數決定陣列大小.如:
引用:
char c=;
陣列長度自動定義為7.此方法可省略逐個去數字符的個數,對多字元賦值比較方便
.
(3)也可以給多維陣列初始化.如下初始化二維陣列的例子:
引用:char trinangle[3][5]=,, };
trinangle陣列中存放的是乙個三角形的圖形,如:
引用:o
oooooooo
下面來看乙個例子:
引用:main() /*輸出如上三角形*/
,, };
int i,j;
for(i=0;i<=2;i++) /*外層列迴圈*/}
方法2:用字串常量來給字元陣列初始化
.例如:
引用:char c=;
這時,編譯計算出該陣列的大小為10.為什麼不是9呢?因為編譯程式在掃瞄整個字串的時候,自動在該串末尾加上'\0'字元,以表示字串到此結束,並把它一起存入字元陣列中.這點請
務必注意
.因此,上面的初始化與下面的初始化等價:
引用:char c=;
而不與以下寫法等價:
引用:
char c=;
前者長度為10,後者長度為9.
引用:'\0'代表ascii碼為0的字元,它是乙個"空操作符",即使什麼也不做.c語言用它來作為字串結束標誌,作用是便於測定字串的實際長度,例如有乙個字串,其中第10個字元為'\0'則此字串的有效字元為9個.也就是說,在遇到字元'\0'時,表示字串結束,由它前面的字元組成字串實際長度.
系統在字串常量末尾自動加乙個'\0'作為結束符.例如"i am a student"共要14個字元,但在記憶體中佔15個位元組,最後乙個位元組'\0'是由系統自動加上的.字串作為一維陣列存放在記憶體中.需要指出的是:字元陣列並不要求它的最後乙個字元為'\0',甚至可以不包含'\0'.例如以下兩種寫法都是合法的:
引用:char c[4]=;
char c[4]=;
但是為了使處理方法一致,便於測定字串的實際長度,以及在程式中作相應的處理,在字元陣列也常常人為地加上乙個'\0'.如:
引用:char c[5]=;
c語言允許在初始化乙個一維字元陣列時,省略
字串常量
外面的大括號.例如:
引用:char c=;
可直接寫成:
引用:char c="i love china";
這種方法清晰直觀,符合人們的習慣.但
注意,在省略大括號的時候,
不能用單個字元作(用單引號括起來的)為初值,而是用乙個字串(用雙引號括起來的)作為初值.也就是說,用方法一初始化時,不能省略大括號;只有在用方法二初始化時才可以省略大括號。如下寫法是錯誤的:
引用:char c='i';
多維陣列初始化時,推薦使用以下形式直接賦給它多個字串.例如:
引用:char str[4][8]=;
字元陣列初始化
上週實習做fcitx輸入法時碰到乙個字元陣列的問題,因基礎的不紮實,導致經除錯了幾分鐘才發現問題所在。字元陣列初始化常見有兩種格式 char arr test 10 和char arr test 11 helloworld 為什麼是一樣的內容,兩個陣列的長度不一樣,乙個是10,乙個是11,因為預設在...
字元陣列的初始化
有關字元陣列的初始化的若干問題 一 注意事項 1.字元陣列的初始化,初始化時賦予的自然是字元 要加單引號 2.賦予字元也可以通過賦予相應字元的ascii碼 去掉單引號 或賦予字串 只加雙引號 來進行。3.對字元陣列完全不進行初始化,則各元素隨機。4.對字元陣列進行不完全初始化,則從低位址 a i 中...
初始化 關於tensorflow的初始化
在寫mnist手寫體識別任務 已放github 時遇到的 問題 我們都知道在session run的時候需要初始化。但是初始化在什麼位置是至關重要的。來看下這段 sess tf.session sess.run tf.global variables initializer mnist model ...