无法访问指向数组的指针的元素

时间:2017-03-31 01:33:21

标签: c++ arrays pointers

我有一个以下数组,我作为指针传递。顺便说一下,我是C ++的新手,刚刚开始指点。

int arr[3][4]= {{2,3,4,8},{5,7,9,12},{1, 0, 6, 10}};
    //int *a = &arr[0][0];
    BuildStringFromMatrix((int *)arr, 3, 4);

我有一个跟随函数,我想访问传递数组的元素。

void BuildStringFromMatrix(int *a, int height, int width);

我访问元素的实现如下

for(int i=0; i<height; i++){
      for(int j=0; i<width; j++){
        int x = *(*(a+i) + j);
        std::cout<<x;
      }
    }

使用此实现时,我收到错误

invalid type argument of unary ‘*’ (have ‘int’
)
         int x = *(*(a+i) + j);

如何解决此问题。

P.S - 我想用单指针实现它。

1 个答案:

答案 0 :(得分:0)

您的函数会收到指向int的指针。它没有“记住”它实际上指向一个二维数组中的int(更不用说数组维度是什么)。

因此,如果要访问二维数组的某个元素,则必须执行计算以查找从指针偏移到预期元素的单位数。 (这有时被称为“扁平化阵列”)。

通常row * row_length + column是特定行列条目的偏移量,因此在您的情况下int x = a[i*width + j];是要使用的正确语句。

如果仍然不清楚,我建议在每次迭代时打印出i*width+j的值,看看它如何在数组上迭代(或在调试器中跟随)。