ホームページ  >  記事  >  バックエンド開発  >  C言語で二次元配列をメモリに格納する順序は何ですか?

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

coldplay.xixi
coldplay.xixiオリジナル
2020-06-28 10:33:078333ブラウズ

C 言語では、2 次元配列のメモリへの格納順序は行単位であり、2 次元配列 A[m][n] は m 行 n 列の 2 次元配列です。 a[p][q] が A の最初の要素であるとします。つまり、2 次元配列の行添字の範囲は p から [m p] であり、列添字の範囲は q から [n q] であるとします。

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 動的 2 次元配列:

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

int **data;//二次元配列の格納ポインタ、ポインタからポインタへ。

date=x[0][0] のアドレスは、この方法でより適切にマークされます。 sizeof(date) の結果は 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 までご連絡ください。