C ++如何声明指向2D数组的指针

时间:2014-01-31 19:11:19

标签: c++ pointers multidimensional-array

我有一部分代码是这样的(假设所有类型都是int):

for(int i = 0; i < h; ++i)
{
    for(int i = 0; i < h; ++i)
    {
        if(...)
        {
             a = B[i][j]
        }
        else
        {
             a = C[i][j]
        }
    }
}

我想写它,以便我只检查一次if条件。但是,如何充分地声明指向2D数组的指针(下例中的变量D)?

if(...)
{
    D = B;
}
else
{
    D = C;
}

for(int i = 0; i < h; ++i)
{
    for(int i = 0; i < h; ++i)
    {
        a = D[i][j]
    }
}

4 个答案:

答案 0 :(得分:3)

结合@MadScienceDreams的回答和@Grijesh Chauhan评论,以下似乎有效:

double A[1000][1000];
double (*B)[1000][1000] = &A;

然后访问一个值:

double a = (*B)[i][j];

答案 1 :(得分:0)

您可以按自己喜欢的方式声明阵列,
只要函数原型匹配数组声明

C ++甚至不应该允许这样的不匹配,但由于某些原因,它与C完全一样愚蠢。

有关详细信息,请参阅this answer

答案 2 :(得分:0)

  const int w = 10;
  const int h = 10;

  char b[w][h];
  char c[w][h];
  char (&d)[w][h] = b;

  assert(&b[0][0]==&d[0][0]);

(假设您使用的是2D数组而不是(更好的,imho)锯齿状数组)。

答案 3 :(得分:-1)

嗨所有人

但是上面的其他内容给出了答案,但结果代码如下
int B[w][h];
int C[w][h];
int (&D)[w][h] = (any clause) ? B : C;
for(int i =0;i < w;i++)
for(int j =0;j < h;j++)
a = D[i][j];