二維陣列 的宣告, 第乙個中括號代表行數, 第二個中括號代表列數
建議宣告格式如下:
intarray[3][
4] = ,,
};二維陣列的遍歷:
intarray[4][
5] = ; // 初始化為0, 即array陣列中共 4 * 5 = 20 個元素的初始值均為0
for(
inti =
0; i <
4; i++)
}for
(int
i =0
; i <
4; i++)
printf
("\n
」 ); // 行與行之間換行
}二維陣列的賦值:
方法一: 同上** 可直接在程式內給陣列賦值
方法二: 通過控制台給陣列賦值 **如下:
inta[3][
10] = ;
for(
inti =
0; i <
10; i++)
}for
(int
i =0
; i <
10; i++) }
二維陣列的本質是乙個特殊的一維空間, 特殊在於 這個一維陣列儲存的元素型別是陣列 且每個元素的長度必須是相同的
如定義乙個二維陣列 a[10][10]
相當於:
a[10] = ; {}內共十個元素
因為二維陣列是也是一段連續的空間
假設 定義二維陣列 a[row][col] // 這裡的row 和col 得由程式設計師先行確定 並且得是乙個常量
系統會根據給定的 常量 row 和col 在記憶體中開闢乙個大小為 row * col的連續空間
空間的位址是連續的 位址按順序排列為:
&a[0][0],&a[0][1]…
&a[0][col - 1], &a[1][0], &a[1][1]…&a[1][col-1],&a[2][0]…&a[row - 1][col - 1]
和一維陣列相同 二維陣列也可通過陣列名訪問二維陣列的位址 相同於一維陣列直接使用數祖名訪問首元素位址
二維陣列是通過二維陣列名訪問其首位址 二維陣列名正是其一維陣列. 各位看官可能不理解 不急往下看:
如 要訪問二維陣列第0行第0列 元素的位址
可用&a[0][0] 來訪問 簡單粗暴 而什麼叫二維陣列的陣列名就是其一維陣列呢
即 二維陣列a[row][col] , 其第 i 行二維陣列的名字 就是 a[i]
也就是 a[i] = &a[i][0]
而第 j 行二維陣列的名字就是 a[j]
結合一維陣列的訪問位址規律
根據上文給的位址順序可推倒出
a[i] + j 即使 a[i][j] 的位址
即 a[i] + j = &a[i][j] 根據此規則 可將上文的位址順序等價改寫成
a[0] + 0, a[0] + 1,…,a[0]+col * 1 - 1, a[0] + col * 1…,a[0] + col * 2 - 1, a[0] + col*2 ,…, a[0] + row*col - 1
對比兩個順序 可以發現
a[0] + col = &a[1][0]
又根據規則 a[i] = &a[i][0]
a[0] + col = &a[1][0] = a[1]
如果能看懂以上各種描述混亂的規則說明你本身已經開始掌握了二維陣列的排列順序
如果看不懂 沒關係 記住結論
可通過 a[i] 訪問 第i行 首元素的位址 即等價於 &a[i][0]
如何將x行y列的二維陣列的值, 儲存到另乙個y行x列的陣列裡
intarray[3][
6] = ;
intarray2[6][
3] = ;
for(
inti =
0; i <
3; i++)
}printf("
陣列1:\n"
);for
(int
i =0
; i <
3; i++)
printf
("\n");}
printf("
陣列2:\n"
);for
(int
i =0
; i <
6; i++)
printf
("\n");
}二維陣列應用:
電影購票軟體選座購票介面
泡泡糖 坦克大戰的 介面
二維陣列的初始化
定義二維陣列時候 可以不給第一維的個數
但是必須給第二維的數字 否則報錯
1. 初值不夠一行的時, 系統自動用0補齊一行.
2. 初值剛剛夠一行的時候, 不會補值
3. 初值超過1行不足2行時, 自動用0補齊, 以此類推
inta[
4] = ;
for(
inti =
0; i <
3; i ++)
printf
("\n");
}輸出結果為
1 2 3 4
5 0 0 0
1606416312 32767 1252157651 2063661990
輸出結果的行數 由遍歷的外層迴圈次數控制
列數由第二維的大小控制
字串陣列:
輸出字串陣列的方法:
char
str3[3][
20] = ;
for(int
i =0
; i <
3; i++)
//取出字串陣列中單個字元
printf
("%c"
, str3[1][
2]);
不同於普通的二維陣列, 字串陣列輸出字串不需要兩層迴圈遍歷 因為以%s 格式輸出字元的時候,系統自動已經遍歷了一遍
因而要取出某個具體字元時扔需要像普通二維陣列一樣通過兩個下標獲得值
需要更改字串陣列中的字串方法:
//賦值字串
char
str4 =
"qwer";
strcpy
(str3[
0], str4);
printf
("%s\n"
, str3[
0]); //字串在進行賦值的時候 需要使用字串拷貝
字元陣列的氣泡排序:
char
name[4][
20] = ;
for(
inti =
0; i <4-
1; i++) }}
for(
inti =
0; i <
4; i++)
三維陣列:
intarray[2][
3][4] = ,,},
,,},
};元素個數為: 2 * 3 * 4 = 24
爬爬爬之路 OC語言 一 語法簡介
oc是對c語言的擴充.c語言的弊端 維護公升級十分複雜 物件導向的特點 封裝 繼承 多型 什麼是物件 萬物皆物件 是c語言的超集,允許在oc中使用c語言的源 編譯器相容c語言程式 具備完善的物件導向特性 包含乙個執行時系統 類庫豐富 指開發人員寫的類庫 分析物件是最重要的一環,是保證程式的擴充套件性...
爬爬爬之路 C語言 九 結構體指標與預編譯指令
結構體是一種自定義的資料型別 結構體的指標和基礎資料型別差不多 結構體變數名不能當成它的首元素位址 需要用取位址符獲得結構體變數的位址,但是結構變數的位址就相當於指向結構體變數的第乙個成員變數的位址 如以下 演示 typedef struct student student student stud...
爬爬爬之路 結構體的初始化及結構體陣列的初始化
定義結構體如下 typedef struct mypoint mypoint 一 結構體變數的初始化 通常不能直接用結構體自身對自己進行賦值,需通過結構體的變數來進行初始化 如 1.mypoint p p.x 5 p.y 6 這是宣告和賦值分離 2.也可宣告的同時進行賦值 mypoint p 3.當...