2016-10-12 34 views
-1

問題は、以下のプログラムの出力を見つけることです。 これは私のテストで出てきました。私は間違っていました。私の答えは答えは4,8,12ですが、私はそれはあなたがない多次元配列である必要があり何多次元配列

#include<iostream> 

using namespace std; 

int main() 
{ 
    int number = 4; 
    int array[] = {7,8,9,10,11,12,13}; 
    int *p1 = &number ; 
    int *p2 = array; 
    int *p3 = &array[3]; 
    int *q[] = {p1,p2,p3}; 

    cout << q[0][0] << endl ; 
    cout << q[1][1] << endl ; 
    cout << q[2][2] << endl ; 

    return 0; 
} 
+0

と同じである。http://ideone.com/DPdvKx –

+0

私は答えを知っていた、私はちょうどこれがどのように動作するのか説明したかった – Teeban

+0

これを述べるためにあなたの質問を編集してください。それは言うべきことは、私は答えが...だから...それは...それはなぜそうなのだろうと思ったのだろうか? –

答えて

3

をどのように動作するかの説明が必要4、7、10であった。(C++にはありません本当にそれを持っている)。あなたが持っているものは、ポインタの配列です。ポインタは配列のように索引付けできます。 「グラフィック」で

配列qを形成し、このようなものになります。

 
+------+------+------+ 
| q[0] | q[1] | q[2] | 
+------+------+------+ 
    |  |  | 
    v  |  v 
+------+ | +-----+----------+----------+-----+ 
|number| | | ... | array[3] | array[4] | ... | 
+------+ | +-----+----------+----------+-----+ 
      v 
      +----------+----------+-----+ 
      | array[0] | array[1] | ... | 
      +----------+----------+-----+ 

いくつかの注意:

ほとんどの人は、多次元配列が実際に配列の配列です呼んで何をして。あなたは整数の配列を持つことができるのと同じように、またはコード内に整数へのポインタ配列qの場合のように、整数配列の配列を持つこともできます。より多くの「ディメンション」については、配列の別の入れ子です。

任意アレイ又はポインタaおよび(有効)屈折率i、式はa[i]*(a + i)に等しいので、ポインタと配列の両方が同じようにインデックス付けすることができる理由としては、それはです。この等価性もまた、配列を最初の要素へのポインタとして使用できる理由です。最初の要素へのポインタを取得するには、&a[0]と書くことができます。これは&*(a + 0)と等しく、アドレス演算子と参照外れ演算子は互いに打ち消しあい、(a + 0)になります。はaと同じです。従って&a[0]aは等しいです。

+0

偉大なASCIIアート:) –

+0

どのようにしてASCIIアートを生成しましたか? – PRP

+0

@PRPちょうど答えにそれを書きました。 :) –

0

q[0]q[1]が実際p2およびqであり、実際p1である[2] p3あります。

今p1からnumberのでP1のアドレスが[0]単に正しく[1]配列と同じであるP2にアレイに4

p2点であると計算された数値である[1 ] 第2の要素は配列ot 8です。位置3から出発arrayのサブアレイに

p3指すようp3[2]あなたは単にideoneに、例えばコードを実行することができるarray[3 + 2] = array[5] = 12