1

だから私はポインタをもっと理解しようとしてきました、そして私はこれに出くわしました:

double **DPtr; // just for example

多次元配列を指すために使用できることを読みましたが、単一の間接符号 ( *) を使用するまで機能しませんでした。

では、多次元配列に二重間接参照を使用できない場合、それは何のためにあるのでしょうか?

答えを見つけようとしましたが、運がありませんでした。

あなたが私に与える情報を事前にありがとう!:)

4

4 に答える 4

2

良い

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 次配列はサイズが異なります。しかし、一般的には、単一ポインターのバリアントを使用することをお勧めします。

于 2013-09-19T15:00:52.300 に答える
1

まず、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
于 2013-09-19T15:04:11.263 に答える
1

「オブジェクトへのポインター」はそれ自体がオブジェクトであるため、「(オブジェクトへのポインター)へのポインター」から「指す」ことができます。

同様に、オブジェクトの配列は、それ自体が「(オブジェクトの配列) の配列」の一部になることができるオブジェクトです。

さて、「配列の名前」は「最初の要素のアドレス」でもあるため、*a と a[0] (したがって、*(a+n) と a[n]) の式は実質的に同等です。 .

double** ppしたがって、次のような used in 式を持つことができますpp[3][4] = 3.14; が、メカニズムは配列とポインターの間で異なります。

配列は次のようになります

_ _ _ _ _ 
_ _ _ _ _
_ _ _ _ _ 

二重間接参照は次のようになります

_ -->  _ --> _ _ _ _
       _ --> _ _ _ _ _ _
       _ --> _ _ _ 

最初のケースでは、3 回繰り返される「幅の広いオブジェクト」を生成するために 5 回繰り返されるオブジェクトがあります。

2 番目のケースでは、「3 つのポインターのグループ」を指している「ポインターからポインターへのポインター」があり、それぞれが (独立したサイズの) オブジェクトの独立したグループを指しています。

于 2013-09-19T15:08:37.453 に答える