2次元配列へのポインタを持つコードを記述しようとしています。2次元配列を指す
私の主な目的は、2次元である5つの配列を指すように、1つの配列だけではなく、
int asd1[2][2];
int asd2[2][2];
int *se;
se[0] = asd1;
se[1] = asd2;
2次元配列へのポインタを持つコードを記述しようとしています。2次元配列を指す
私の主な目的は、2次元である5つの配列を指すように、1つの配列だけではなく、
int asd1[2][2];
int asd2[2][2];
int *se;
se[0] = asd1;
se[1] = asd2;
使用se = asd[0];
理由は、シンボルasd
がintではなくintの一次元配列へのポインタへのポインタを得ないということです。
@ Migの解決策も良いかもしれません。それはあなたが望むものに依存します。私の経験では、のような基本型の2次元配列をのように扱うと、1次元の長さがn * nのようになります。(これは数値計算では真実ですが、BLASとLAPACKを呼び出す可能性がありますが、他の場所でも真実かもしれませんが、ここで数値的な仕事はしていませんが、 。あなたが好むしない幸運を参照してください)
を使用すると、動的にその配列を割り当てた場合、あなたはこのような何かを行うことができ:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main() {
int i;
int **asd;
asd = (int **)malloc(sizeof(int *) * SIZE);
for (i = 0; i < SIZE; i++) {
asd[i] = (int*)malloc(sizeof(int) * SIZE);
}
int **se;
se = asd;
se[0][1] = 10;
printf("%d %d\n", se[0][1], asd[0][1]);
for (i = 0; i < SIZE; i++) {
free(asd[i]);
}
free(asd);
return 0;
}
EDIT:私の最初の答えが間違っていた、ここです私が言ったこと:
あなたの配列は2次元であるため、ポインタへのポインタが必要ですNAL:
int asd[2][2];
int **se;
se = asd;
今、あなたのことができるようにする必要があります
se[0][1] = 10;
あなたはこのような何かをしたい:
int asd[2][2];
int (*se)[2] = asd;
これは
int (*se)[2] = &asd[0];
asd
ので減衰に相当しますへのポインタにこの文脈の最初の要素。
心に留めて重要なことは、あなたがint[2]
(すなわちint (*)[2]
)とないint*
(すなわちint**
)へのポインタへのポインタを必要とするので、asd[0]
のタイプは、int[2]
、ないint*
であるということです。
場合のようなお、あなたがasd[0]
の最初の要素にint*
点を作ることができる。
int *p = &asd[0][0]; // or just = asd[0];, because it decays to &asd[0][0];
それは、例えば、1次元配列であるかのように、2Dアレイの他の要素にアクセスしますp[2]
は、未定義の動作になります。
より一般的な点として、生のCスタイルのアレイを手助けすることができればそれを避けるほうがよい場合がよくあります。必要に応じて、std::array
またはstd::vector
を調べることをおすすめします。
あなたはこれを行うことができます。
#include<stdio.h>
int main()
{
int asd[2][2] = {{0,1},{2,3}};
int (*se)[2]; // a pointer (*se) to an array (2-element array, but only you know it, not the compiler) of array-of-two-integers [2]
se = asd;
printf("%d %d\n%d %d\n", se[0][0], se[0][1], se[1][0], se[1][1]);
return 0;
}
か:
#include<stdio.h>
int main()
{
int asd[2][2] = {{0,1},{2,3}};
int (*se)[2][2]; // a pointer (*se) to a 2-element array (first [2]) of two element array (second [2]) of ints
se = &asd;
printf("%d %d\n%d %d\n", (*se)[0][0], (*se)[0][1], (*se)[1][0], (*se)[1][1]);
return 0;
}
は、あなたが "パラメータとして2次元配列を渡す" ググことがありますか? –