0

1Dメモリスペースを割り当てることは可能ですか?

int *x=(int *)malloc(100*sizeof(int));

次に、返されたポインタを2D配列に再キャストします。

int **y=(int **)x;

2D配列であるかのようにアクセスしますy[1][2] = 12;

私の目的は、共有メモリセグメントを取得し、ユーザーがこの線形空間を最大の効率で解釈する方法に応じて(つまり、新しいN次元配列を宣言してデータをコピーせずに)1D、2D、...ND配列を返すことです。

2つ目の注意点として、N次元配列を処理し、それらからスライスを取得して効率的に転置する(たとえば、行メジャーから列メジャーへの変換)C用のライブラリはありますか?

ありがとう、bliako

4

2 に答える 2

1

d2これでうまくいきますが、コンパイル時に知る必要がないことに注意してください。

int *y[d2];
y=(int (*)[d2])x;
于 2011-04-01T17:08:59.073 に答える
1

あなたのint *意志を唱えることがあなたが望む効果をもたらすかどうかは完全にはわかりません.

最初のステートメントの後、x新しく割り当てられたメモリを指すので、次のようなことを行っても問題ありませんx[1] = 8;。メモリにはデータ (つまり、配列の値) が保持されます。

ただし、2 番目のステートメントの後、yそれが を指していると考えint *、以前のデータを一連のintポインターに効果的に変換します。以前に保存したすべての値は、メモリ内の他の場所へのアドレスとして扱われるようになりました。以前に割り当てたメモリのアドレス指定方法を単純に再定義しているわけではありません。メモリを完全に再利用しています。

あなたが提案することは不可能ではないと思いますが、あなたが提案した方法ほど簡単ではありません。

多次元配列を処理するためのライブラリについては、次の記事をご覧ください: How do I best handle dynamic multi-dimensional arrays in C/C++?

于 2010-07-30T16:43:55.717 に答える