c的一維陣列,二維陣列,字元陣列,以及相關的指標

2021-10-20 14:21:00 字數 1576 閱讀 5678

int a[10]

;//中的值只能是常量或常量表示式,不能是變數

//四種一維陣列初始化

int b[5]

=;int c[5]

=;//只為c[0],c[1]賦值,剩下的陣列元素值預設為0

int d[5]

=;//陣列中所有元素都為0

int e=

;//系統預設e陣列中有5個元素

int a[10]=;

int *p;

//取a陣列首位址

p=&a[0];

p=a;//也可以

//指標的加減

考試經常像下面這樣考

若想要a[0]數值加1,即++a[0],可以用++*p實現

若是a[0]++,則要用(*p)++實現,因為++運算子優先順序比取值運算子「*」高

p=&a[0];則*(p+i)就是a[i]

int a[4]

[7];

//同樣必須是常量或常量表示式

//四種二維陣列初始化情況

int b[2]

[3]=

,};int c[2]

[3]=

;int d[2]

[3]=

,};//給特定值賦值,d[0][0]=1,d[1][0]=2,其餘都為0

int e[2]

[3]=

,};//同上,d[0][0]=1,d[1][1]=2

int f[

3]=;

//這種情況可省略行數,會預設為2行

a是二維陣列陣列名,同時a也代表指向a[0]的乙個二級指標,所代表的位址值與a[0]相同

a[0]等價於*a,是0行0列元素的位址

a[1]等價於*(a+1),是1行0列元素的位址

&a[1]等價於a+1,是1行起始位址,當然這個位址也是上面的1行0列元素的位址

&a[1][2]等價於a[1]+2,等價於*(a+1)+2,是1行2列元素的位址

a[1][2]等價於*(a[1]+2),*(*(a+1)+2),是1行2列元素的值

說了那麼多,總結一下就是a是乙個二級指標,指向a[0]。而a[0]是乙個一級指標,指向二維陣列的0行。

所以他們值是一樣的。

char a=

;char b=

"hhh hhh"

;//這樣初始化的陣列最後乙個元素是'\0',作為字串的結束符

char c=

;//也可以這樣

char d=

;//但一般我們自己也會手動加上'\0'

printf

("%s\n"

,d);

//字串用%s,當然你也可以用%c迴圈輸出

//考試經常問字元陣列長度多少,注意有沒有'\0'即可

char s=「abcdrfg」;

則s[0]等價於*s

s[2]等價於*(s+2)

陣列(一維陣列 二維陣列)

陣列概述 c 陣列從零開始建立索引,即陣列索引從零開始。c 中陣列的工作方式與在大多數其他流行語言中的工作方式類似。但還有一些差異應引起注意。這些其實和泛型有些類似,陣列的操作沒有泛型方便,但是效能卻不是泛型所能比擬的 宣告陣列時,方括號 必須跟在型別後面,而不是識別符號後面。在c 中,將方括號放在...

c 一維陣列,二維陣列,多維陣列。

陣列就是給乙個變數定義多個字元,可以是string也可以是int。或者說是一組變數。可以更加方便的操作大量資料。陣列的定義 1 陣列裡面的內容必須是同一型別 2 資料必須有長度限制 一維陣列 一 資料型別 變數名 new 資料型別 長度 陣列定義 string a new string 這裡寫陣列包...

C 二維陣列還是一維陣列?

記得剛學習c 那會這個問題曾困擾過我,後來慢慢形成了不管什麼時候都用一維陣列的習慣,再後來知道了在一維陣列中提出首列元素位址進行二維呼叫的辦法。可從來沒有細想過這個問題,最近自己寫了點 測試下,雖然還是有些不明就裡,不過結果挺有意思。為了避免編譯器優化過度,用的是寫操作,int,測試分為不同大小的空...