文章轉自:https://www.cnblogs.com/zhugesiying/p/array.html
1.二維數組的定義
語法:
<類型標識符> <數組名標識符> [<常量表達式>] [<常量表達式>]
如:float a [3] [4],b [5] [6];
a[2][3],a是數組名,后面的兩個方括號內分別放行下標和列下標。下標的規則如下:
(1)可以是正的整形變量 e.g a[2][3]
(2)可以是字符常量 e.g a['A']['B']
(3)可以是有確定值的表達式 eg:a [i+1] [j+2]、a [ A[1] ] [ A[2] ];
上面我們把二維數組理解成二維圖表,我們也可以將二維數組看成元素是一維數組的一維數組,將維數降低。比如 a [3] [4],我們可以把a看成一個一維數組,里面有三個元素:a [0]、a [1]、a[2],每個元素又包含4個元素。

在C語言中,二維數組中元素排列的順序是按行存放的,就是說先排列第一行的數據,再排列下第二行的數據,以此類推。如圖:

2.二維數組的初始化
(1)分行給二維數組賦值
int a [2] [3] = {{1, 2, 3}, {4, 5, 6}};
此語句先將第一行元素依次賦值為:1、2、3,然后將第二行元素賦值為:4、5、6,因此說是按行賦值。
(2) 可以只有一個花括號,按二維數組元素的排列順序對各元素依次賦值
int a [2] [3] = {1, 2, 3, 4, 5, 6};
(3)對部分元素賦初值
int a [2] [3] = {{2}, {4}};
此語句表示只給第一行第一個元素賦值為2,第二行第一個元素賦值為4,而其他元素都為0。
int a [2] [3] = {{1, 2, 3}};
此語句表示只給第一行三個元素分別賦值為:1、2、3。
int a [2] [3] = {{},{1, 2, 3}};
此語句表示只給第二行三個元素分別賦值為:1、2、3。
(4)定義數組時對第一維的長度可以不定義,但必須定義第二維的長度
int a [] [3] = {1, 2, 3, 4, 5, 6};
系統會根據輸入的總個數分配存儲空間,易知這個二維數組有二行;
以下部分轉自:http://c.biancheng.net/view/1829.html
注意:在C語言中,二維數組是按行排列的。也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 個元素也是依次存放。數組 a 為 int 類型,每個元素占用 4 個字節,整個數組共占用 4×(3×4)=48 個字節。
3.簡單示例:
3.1將二維數組(5行5列)的右上半部分置零。

#include <stdio.h> void main() { int a[5][5]= {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,253}}; int i,j; for(i=0;i<5;i++) { for(j=0;j<5;j++) { if(i<j) { printf("%3d",0); } else { printf("%3d",a[i][j]); } } printf("\n"); } }
3.2求二維數組(3行3列)的對角線元素的和

#include <stdio.h> void main() { int a[3][3]={{10,12,13},{14,15,16},{17,18,19}},sum=0; int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i==j) { sum=sum+a[i][j]; } } } printf("%d",sum); }
3.3求二維數組(5行5列)中最大元素值及其行列號
View Code
3.4一個學習小組有 5 個人,每個人有 3 門課程的考試成績,求該小組各科的平均分和總平均分。(轉自:http://c.biancheng.net/view/1829.html)

對於該題目,可以定義一個二維數組 a[5][3] 存放 5 個人 3 門課的成績,定義一個一維數組 v[3] 存放各科平均分,再定義一個變量 average 存放總平均分。
#include <stdio.h> void main() { int i, j; //二維數組下標 int sum = 0; //當前科目的總成績 int average; //總平均分 int v[3]; //各科平均分 int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}}; //用來保存每個同學各科成績的二維數組 for(i=0; i<3; i++){ for(j=0; j<5; j++){ sum += a[j][i]; //計算當前科目的總成績 } v[i]=sum/5; // 當前科目的平均分 sum=0; } average = (v[0] + v[1] + v[2]) / 3; printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]); printf("Total: %d\n", average); }
參考文章:
https://www.cnblogs.com/zhugesiying/p/array.html
http://c.biancheng.net/view/1829.html
https://wenku.baidu.com/view/7280fe769a6648d7c1c708a1284ac850ad020432.html
