ホームページ >バックエンド開発 >C#.Net チュートリアル >C言語で二次元配列をメモリに格納する順序は何ですか?

C言語で二次元配列をメモリに格納する順序は何ですか?

青灯夜游
青灯夜游オリジナル
2021-07-12 11:47:4528223ブラウズ

メモリ内の 2 次元配列の格納順序は行ごとです。つまり、1 行が配置された後、2 行目が配置されます。つまり、「a[0]」行は最初に保存され、次に "a[1" ]" 行が保存され、次に "a[2]" 行が保存されるというように、すべての要素が配置されるまで続きます。各行の要素も順番に保存されます。

C言語で二次元配列をメモリに格納する順序は何ですか?

#このチュートリアルの動作環境: Windows7 システム、C99 バージョン、Dell G3 コンピューター。

2 次元配列定義の一般的な形式は次のとおりです。

dataType arrayName[length1][length2];

ここで、dataType はデータ型、arrayName は配列名、length1 は最初の次元の添字の長さ、length2 は2 次元の添え字の長さ。

2 次元配列は、行と列を含む Excel テーブルと考えることができます。length1 は行数を表し、length2 は列数を表します。要素を 2 つの配列で見つけるには、次元配列の場合は、行と列の両方を指定する必要があります。 例:

int a[3][4];

は、3 行 4 列、合計 3×4=12 個の要素を含む 2 次元配列を定義します。配列名は 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]と記述します。

2 次元配列を、X 軸と Y 軸を持つ座標系と考えることもできます。平面内の点を決定するには、X 軸と Y 軸の両方を知っている必要があります。 y 軸。

2 次元配列は概念的には 2 次元ですが、メモリに連続的に格納されます。つまり、2 次元配列の要素は隙間なく隣り合っています。では、2 次元配列を線形メモリに格納するにはどうすればよいでしょうか?

  • 1 つは行ごとに配置する、つまり 1 行を配置した後に 2 行目を配置する方法です。 #もう1つは、1つ目は列に配置する方法です。つまり、1つの列を配置した後、2列目に配置します。

  • C 言語では、2 次元配列が行に配置されます。

    つまり、最初に a[0] 行が保存され、次に a[1] 行が保存され、最後に a[2] 行が保存され、各行の 4 つの要素も順番に保存されます。配列 a は int 型で、各要素は 4 バイトを占め、配列全体は合計 4×(3×4)=48 バイトを占めます。
このように考えると、2 次元配列は同じ長さの複数の 1 次元配列で構成されます。

例:

勉強グループに 5 人がいて、各人が 3 つのコースのテストのスコアを持っている場合、各科目の平均スコアと全体のスコアを求めます。グループの平均点。

#--

数学C##張濤807592王正华616571李丽596370 # 趙泉泉85879085この質問では、2 次元配列 a[5][3] を定義して、3 つのコースの 5 人のスコアを保存できます。 1 次元配列 v[3] を定義して各被験者の平均スコアを格納し、次に変数 Average を定義して合計平均スコアを格納します。最終的なプログラミングは次のとおりです: 実行結果: プログラムは、ネストされたループを使用して、すべての科目のすべての生徒のスコアを読み取ります。内側のループでは、あるコースの各学生のスコアを順番に読み込んで累積し、内側のループを抜けた後(外側のループに入った)、累積したスコアを5で割ってv[iに送信します。 ] 、これはコースの平均スコアです。外側のループは合計 3 回ループし、3 つのコースのそれぞれの平均成績を計算し、配列 v に格納します。すべてのループが完了したら、v[0]、v[1]、v[2] を加算し、3 で割って全体の平均スコアを取得します。 関連する推奨事項: 「
英語
#周孟鎮 76 77
#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
C 言語ビデオ チュートリアル

以上がC言語で二次元配列をメモリに格納する順序は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。