首頁 >後端開發 >C#.Net教程 >C語言中二維數組在記憶體中的存放順序是什麼

C語言中二維數組在記憶體中的存放順序是什麼

青灯夜游
青灯夜游原創
2021-07-12 11:47:4528224瀏覽

二維數組在記憶體中的存放順序是按行存放,即放完一行之後再放入第二行;也就是先存放「a[0]」行,再存放「a[1 ]」行,接著存放「a[2]」行,以此類推直到元素放完;每行中元素也是依序存放。

C語言中二維數組在記憶體中的存放順序是什麼

本教學操作環境: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 門課程的考試成績,求小組各科的平均分數和總分。

##616571李麗麗596370趙圈858790週夢真76
-- Math C English
張濤 80 75 92
#王正華

########## #77######85###############對於該題目,可以定義一個二維陣列a[5][3] 存放5 個人3 門課的成績,定義一個一維數組v[3] 存放各科平均分,再定義一個變數average 存放總平均分。最終程式設計如下:###
#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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn