二維數組在記憶體中的存放順序是按行存放,即放完一行之後再放入第二行;也就是先存放「a[0]」行,再存放「a[1 ]」行,接著存放「a[2]」行,以此類推直到元素放完;每行中元素也是依序存放。
本教學操作環境:windows7系統、c99版本、Dell G3電腦。
二維數組定義的一般形式是:
dataType arrayName[length1][length2];
其中,dataType 為資料類型,arrayName 為數組名,length1 為第一維下標的長度,length2 為第二維下標的長度。
我們可以將二維陣列看做一個Excel 表格,有行有列,length1 表示行數,length2 表示列數,要在二維陣列中定位某個元素,必須同時指明列和行. 例如:
int a[3][4];
定義了一個3 行4 列的二維數組,共有3×4=12 個元素,數組名為a,即:
a[0][0], a[0][1], a[0][2], a[0][3] a[1][0], a[1][1], a[1][2], a[1][3] a[2][0], a[2][1], a[2][2], a[2][3]
如果想表示第2 行第1 列的元素,應該寫a[2][1]。
也可以將二維數組看成一個座標系,有 x 軸和 y 軸,要想在一個平面中確定一個點,必須同時知道 x 軸和 y 軸。
二維數組在概念上是二維的,但在記憶體中是連續存放的;換句話說,二維數組的各個元素是相互挨著的,彼此之間沒有縫隙。那麼,如何在線性記憶體中存放二維數組呢?有兩種方式:
一種是按行排列, 即放完一行之後再放入第二行;
另一種是按列排列, 即放完一列之後再放入第二列。
在C語言中,二維陣列是按行排列的。 也就是先存放 a[0] 行,再存放 a[1] 行,最後存放 a[2] 行;每行中的 4 個元素也是依序存放。陣列 a 為 int 類型,每個元素佔用 4 個位元組,整個陣列共佔 4×(3×4)=48 個位元組。
你可以這麼認為,二維數組是由多個長度相同的一維數組構成的。
例如:
一個學習小組有 5 個人,每個人有 3 門課程的考試成績,求小組各科的平均分數和總分。
-- | Math | C | English |
張濤 | 80 | 75 | 92 |
#王正華 | ##6165 | 71 | |
59 | 63 | 70 | |
85 | 87 | 90 | |
76 |
#include <stdio.h> int main(){ int i, j; //二维数组下标 int sum = 0; //当前科目的总成绩 int average; //总平均分 int v[3]; //各科平均分 int a[5][3]; //用来保存每个同学各科成绩的二维数组 printf("Input score:\n"); for(i=0; i<3; i++){ for(j=0; j<5; j++){ scanf("%d", &a[j][i]); //输入每个同学的各科成绩 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); return 0; }###運行結果:###
Input score: 80 61 59 85 76 75 65 63 87 77 92 71 70 90 85↙ Math: 72 C Languag: 73 English: 81 Total: 75###程式使用了一個巢狀循環來讀取所有學生所有科目的成績。在內層循環中依序讀入某一門課程的各個學生的成績,並把這些成績累加起來,退出內層循環(進入外層循環)後再把該累加成績除以5 送入v[i]中,這就是該門課程的平均分數。外層循環共循環三次,分別求三門課各自的平均成績並存放在數組 v 中。所有循環結束後,將 v[0]、v[1]、v[2] 相加除以 3 就可以得到總平均分數。 ######相關推薦:《###C語言影片教學###》###
以上是C語言中二維數組在記憶體中的存放順序是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!