2016-10-12 259 views
-1

问题是要找到follwing程序的输出。 这在我的测试中出来了,我错了。我的回答是4,7,10,答案是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

可以简单地ideone执行该代码例如:http://ideone.com/DPdvKx –

+0

我知道答案,我只是想解释如何工作 – Teeban

+0

然后请编辑你的问题来说明这一点。应该说,我认为答案是......因为......虽然......这是为什么呢? –

回答

3

你有什么是不一个多维数组的解释(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相同。所以&a[0]a是相等的。

+0

伟大的ASCII艺术:) –

+0

虽然你是如何生成ASCII艺术的? – PRP

+0

@PRP只是直接写入答案。 :) –

0

q[0]实际上p1q[1]实际上p2和q [2]是p3

现在P1是地址number所以P1 [0]是简单地你正确计算为4。

p2点阵列,使得P2 [1]是相同的阵列[1的数目的值]这是第二个元素在数组ot 8

p3点的array子阵列从位置开始3.所以p3[2]相同array[3 + 2] = array[5] = 12