我有一个以下数组,我作为指针传递。顺便说一下,我是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 - 我想用单指针实现它。
答案 0 :(得分:0)
您的函数会收到指向int
的指针。它没有“记住”它实际上指向一个二维数组中的int(更不用说数组维度是什么)。
因此,如果要访问二维数组的某个元素,则必须执行计算以查找从指针偏移到预期元素的单位数。 (这有时被称为“扁平化阵列”)。
通常row * row_length + column
是特定行列条目的偏移量,因此在您的情况下int x = a[i*width + j];
是要使用的正确语句。
如果仍然不清楚,我建议在每次迭代时打印出i*width+j
的值,看看它如何在数组上迭代(或在调试器中跟随)。