将1D固定数组传递给2D指针功能

时间:2017-10-31 14:28:19

标签: c arrays pointers

有没有办法将1D固定数组传递给2D指针函数。我可以弄清楚传递1D指针数组。

void prettyPrintMatrix_float(float **matrix, int rows, int cols){
    int i, j;

    for (i = 0; i<rows; i++){
        for (j = 0; j<cols; j++){
            printf("%10.3f", matrix[i][j]);
        }
        printf("\n");
    }
    return;
}

float myArray[10] = {0.0f};
float* myPointerArray = (float*)malloc(sizeof(float) * 10);
prettyPrintMatrix_float(&myPointerArray, 1, 10); // Works
prettyPrintMatrix_float(&myArray, 1, 10); // ERROR
prettyPrintMatrix_float(&(myArray[0]), 1 , 10); ERROR

所以我无法想办法解决这个问题。我能想到的唯一方法就是创造新的功能。我不愿意,如果我不愿意的话。

1 个答案:

答案 0 :(得分:0)

您无法执行您要执行的操作,float**不是float*,也不具有相同的内存布局。

第一个是指向float指针的指针,这意味着第一次取消引用会产生一个指针,而float*会直接获得该值。

您可以使用float*的地址来获取float**,但这不是您想要做的事情(因为rows将非常简单1)。以单一方式管理2D和1D数组的方法是始终使用float*并使用特殊函数来获取两个维度的正确元素,例如:

float get(float* data, float x, float y, float w) {
  return data[y*w + x];
}

所以一切都可以围绕float*