ホームページ >バックエンド開発 >C#.Net チュートリアル >C言語で二次元配列をメモリに格納する順序は何ですか?
#このチュートリアルの動作環境: Windows7 システム、C99 バージョン、Dell G3 コンピューター。 2 次元配列定義の一般的な形式は次のとおりです。メモリ内の 2 次元配列の格納順序は行ごとです。つまり、1 行が配置された後、2 行目が配置されます。つまり、「a[0]」行は最初に保存され、次に "a[1" ]" 行が保存され、次に "a[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 次元配列を線形メモリに格納するにはどうすればよいでしょうか?
C 言語では、2 次元配列が行に配置されます。
つまり、最初に a[0] 行が保存され、次に a[1] 行が保存され、最後に a[2] 行が保存され、各行の 4 つの要素も順番に保存されます。配列 a は int 型で、各要素は 4 バイトを占め、配列全体は合計 4×(3×4)=48 バイトを占めます。例:
勉強グループに 5 人がいて、各人が 3 つのコースのテストのスコアを持っている場合、各科目の平均スコアと全体のスコアを求めます。グループの平均点。#--数学
英語 | ##張濤 | 80 | 75 |
王正华 | 61 | 65 | |
李丽 | 59 | 63 | |
# 趙泉泉 | 85 | 87 | |
#周孟鎮 | 76 | 77 | |
この質問では、2 次元配列 a[5][3] を定義して、3 つのコースの 5 人のスコアを保存できます。 1 次元配列 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に送信します。 ] 、これはコースの平均スコアです。外側のループは合計 3 回ループし、3 つのコースのそれぞれの平均成績を計算し、配列 v に格納します。すべてのループが完了したら、v[0]、v[1]、v[2] を加算し、3 で割って全体の平均スコアを取得します。
」
以上がC言語で二次元配列をメモリに格納する順序は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。