【问题标题】:C++: make one matrix point to anotherC++:使一个矩阵指向另一个
【发布时间】:2011-10-01 11:50:45
【问题描述】:

全部。我的 C++ 教授向我提出了一个有趣的问题。显然,它也用于一些编程工作面试。

情况是这样的。我有一个 int 的二维数组(矩阵):

int array1[][2] = {{11, 12}, {21, 22}};

我想创建第二个二维数组 array2,它指向第一个数组。也就是说,它们会占用相同的内存空间。

显而易见的解决方案是使用指针。所以,我这样声明array2:

int (*array2)[2][2];
array2 = &array1;

这似乎有效。现在,这就是问题所在。我试图从 array1 中减去 11,但是通过引用 array2 来做到这一点。这是我要完成的代码:

for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
        // Trying to do the equivalent of this:
        array1[i][j] -= 11;
    }
}

我在内部for循环的主体中尝试了以下内容,但均未成功:

// Second row not affected
*(array2[i][j]) -= 11;

// Second row not affected
*(*(array2[i]) + j) -= 11;

// incompatible types in assignment of `int' to `int[2]'
*( *(array2 + i) + j) -= 11;

有什么想法吗?我怀疑有些简单的事情我只是没有说到这里。

谢谢!

【问题讨论】:

    标签: c++ pointers multidimensional-array


    【解决方案1】:

    由于这是 C++,您可以使用引用创建别名数组,这正是他们所做的。

    int array1[][2] = {{11, 12}, {21, 22}};
    int (&array2)[2][2] = array1;
    
    for(int i=0; i<2; ++i)
        for(int j=0; j<2; ++j)
             array2[i][j] -= 11;
    

    虽然问题更可能是 C 问题,期望 array2 是指向 array1 第一行的指针

    int array1[][2] = {{11, 12}, {21, 22}};
    int (*array2)[2] = array1;
    
    for(int i=0; i<2; ++i)
        for(int j=0; j<2; ++j)
             array2[i][j] -= 11;
    

    【讨论】:

    • 第二种解决方案的问题是我不能将array2传递给一个函数来代替array1。另外,我还没有看到声明数组时使用的第一种语法。我什至不知道我能做到这一点。
    • @Karl 传递给函数是相同的:f(int a[][2], int size) 将接受array1array2 的任一版本
    • 对不起,你是对的。按照我最初设置的方式,您必须在传递数组时取消引用:f(*array2, 2)。如果您使用任何一种解决方案,则不会。这就是我遇到错误的地方。
    • 顺便说一句,这是教授正在寻找的答案,尽管两者都可以解决问题。
    【解决方案2】:

    array2 指向array1,因此您可以通过*array2 访问array1。试试(*array2)[i][j]

    【讨论】:

    • 哦,呵呵,当然可以。我在想我需要取消引用指向数组行的指针,而不是指向数组本身的指针。谢谢!
    • @Karl:如果是正确答案,别忘了通过答案左侧的灰色标记接受它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多