ホームページ  >  記事  >  バックエンド開発  >  C言語で二次元配列の要素はどのような順序でメモリに格納されるのでしょうか?

C言語で二次元配列の要素はどのような順序でメモリに格納されるのでしょうか?

烟雨青岚
烟雨青岚オリジナル
2020-06-28 14:54:0710112ブラウズ

C 言語では、2 次元配列要素はメモリ内の行に格納されます。 2 次元配列 A[m][n]。m 行 n 列の 2 次元配列です。a[p][q] が A の最初の要素であると仮定すると、「行の優先順位」に従って格納できます。 " または "列メジャー" ストレージは、要素 a[i][j] のアドレスを計算するために使用されます。

C言語で二次元配列の要素はどのような順序でメモリに格納されるのでしょうか?

#C 言語では、2 次元配列要素は行ごとにメモリに格納されます。

2 次元配列 A[m][n]。これは、m 行、n 列の 2 次元配列です。 a[p][q] を A の最初の要素とします。つまり、2 次元配列の行の添字は p から m p まで、列の添字は q から n q までとなります。 「メジャーオーダー」の要素 a[i ][j] のアドレスは次のように計算されます:

LOC(a[i][j]) = LOC(a[p][q]) ((i − p) * n (j − q)) * t;

「列優先順」で格納される場合、アドレスは次のように計算されます:

LOC(a[i][j ]) = LOC(a[p][q]) ( (j − q) * m (i − p)) * t;

この配列を格納するために必要なユニットの最小数は (m-p 1) ) * (n-q 1) * t バイト。

C言語で二次元配列の要素はどのような順序でメモリに格納されるのでしょうか?

拡張情報

C 動的 2 次元配列:

整数を例にとります。行は次のとおりです。行数、col は列数

int **data;//二次元配列の格納ポインタ(ポインタへのポインタ。日付=x[0][0]のアドレス。これsizeof (日付) の結果は 4 であり、2 次元配列を格納することは不可能であるため)。

//以下实现如何申请内存
data = new int *[row];
for (int k = 0; k < row; k++)
{
data[k] = new int[col];
}
//赋值跟普通二维数组一样 例如
data[0][0] = 5; //将二维数组1行1列(C++中称为0行0列)赋值为5
//删除内存
for (int i = 0 ; i < row; ++i)
{
delete [] data[i]; //此处的[]不可省略
}
delete [] data;

推奨チュートリアル: 「

C 言語

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

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