だから私はポインタをもっと理解しようとしてきました、そして私はこれに出くわしました:
double **DPtr; // just for example
多次元配列を指すために使用できることを読みましたが、単一の間接符号 ( *
) を使用するまで機能しませんでした。
では、多次元配列に二重間接参照を使用できない場合、それは何のためにあるのでしょうか?
答えを見つけようとしましたが、運がありませんでした。
あなたが私に与える情報を事前にありがとう!:)
だから私はポインタをもっと理解しようとしてきました、そして私はこれに出くわしました:
double **DPtr; // just for example
多次元配列を指すために使用できることを読みましたが、単一の間接符号 ( *
) を使用するまで機能しませんでした。
では、多次元配列に二重間接参照を使用できない場合、それは何のためにあるのでしょうか?
答えを見つけようとしましたが、運がありませんでした。
あなたが私に与える情報を事前にありがとう!:)
良い
double **DPtr;
double へのポインターへのポインターを定義します。これには、質問に固有のさまざまな用途があります。double の 2 次元配列に使用できます。ただし、注意してください。
double* A = new double[10][10]
double ポインターの 1 つの配列の代わりに、長さ 100 double のメモリの 1 つのブロックを定義し、それぞれに 10 個の double のブロックを定義します。「実際の」2次元配列を取得するには、次のようなことができます
double** A2d = (double*)[10];
for(int i=0; i<10;i++){
A2d = new double[10]
}
これにより、それぞれがサイズ 10 の 10 個の配列の配列が作成されます。両方のタイプの 2 次元配列に同じ方法でアクセスできることに注意してください。たとえば、A[1][5] は両方に対して機能します。実際の 2 次元配列は特に便利です。2 次配列はサイズが異なります。しかし、一般的には、単一ポインターのバリアントを使用することをお勧めします。
まず、2D 配列 (動的に割り当てられます) に使用できます。
例えば:
double** array;
array = new double*[10];
for(unsigned int i = 0; i < 10; i++){
array[i] = new double[20];
}
次のようにアクセスできる 10x20 の 2D 配列を作成します
//Classic syntax with subscript operator
double d1 = array[2][4];
//Obfuscate syntax using pointer arithmetics
double d2 = *(*(array+2)+4);
ポインターの配列を使用しています (配列自体として使用できます)。それでも、それは実際にはあまり実用的ではなく、安全でない (多くの場合、生のポインタは安全ではありません) ため、std::array
優先するstd::vector
必要があります。
しかし、単純にポインターへのポインターとして使用することもできます (ダブルポインターよりも先に進むことができます)。
例えば :
int var = 10;
int *var_ptr= &var;
int **var_dbl_ptr = &var_ptr;
std::cout << **var_dbl_ptr << std::endl;
//Prints 10
「オブジェクトへのポインター」はそれ自体がオブジェクトであるため、「(オブジェクトへのポインター)へのポインター」から「指す」ことができます。
同様に、オブジェクトの配列は、それ自体が「(オブジェクトの配列) の配列」の一部になることができるオブジェクトです。
さて、「配列の名前」は「最初の要素のアドレス」でもあるため、*a と a[0] (したがって、*(a+n) と a[n]) の式は実質的に同等です。 .
double** pp
したがって、次のような used in 式を持つことができますpp[3][4] = 3.14;
が、メカニズムは配列とポインターの間で異なります。
配列は次のようになります
_ _ _ _ _
_ _ _ _ _
_ _ _ _ _
二重間接参照は次のようになります
_ --> _ --> _ _ _ _
_ --> _ _ _ _ _ _
_ --> _ _ _
最初のケースでは、3 回繰り返される「幅の広いオブジェクト」を生成するために 5 回繰り返されるオブジェクトがあります。
2 番目のケースでは、「3 つのポインターのグループ」を指している「ポインターからポインターへのポインター」があり、それぞれが (独立したサイズの) オブジェクトの独立したグループを指しています。