如何确定二维数组的大小?

时间:2017-04-29 05:20:44

标签: c arrays

我试图找到一种方法来查找2D数组的大小。这是我用来创建矩阵的函数:

float** createMatrix(int rows, int colums,char populate){

float** matrix = malloc(sizeof(float*)*rows); // allocates the memory for all the pointers of the 2D array

for(int i = 0;i<rows;i++){ // allocates the memory for each pointer in the 2D array
    matrix[i] = malloc(sizeof(float)*colums); // allocates the memory for all the colums in each row
}

if(populate=='Y'){
    for(int i = 0;i<rows;i++){ // prompts the user for values to create the array
        for(int j = 0;j<colums;j++){
            printf("Value for row %d colum %d: ",i+1,j+1);
            scanf("%f",&matrix[i][j]);
        }
    }

}else if(populate=='N'){
    return matrix;
}

return matrix; // returns the matrix created
}

测试出来:

float** matrix = createMatrix(100,100,'N');  

int rows = sizeof(matrix)/sizeof(float*);
int colums = sizeof(matrix[0])/sizeof(float) - 1;

printf("Rows: %d and Cols: %d",rows,colums);

我得到&#34;行:1和Cols:1&#34;作为输出。我不确定自己做错了什么?

1 个答案:

答案 0 :(得分:1)

答案在函数调用中的参数值中:

    createMatrix(100,100,'N')

所以答案应该是100行和100列。

变量矩阵是[0] [0]索引矩阵的存储器地址,其是2D阵列。从这个内存地址,无法使用sizeof()C函数找出2D的维度。可能有一种方法可以逻辑地追溯它。

以下是您获得上述输出的原因:

   int rows = sizeof(matrix)/sizeof(float*);
   int colums = sizeof(matrix[0])/sizeof(float) - 1;

matrix是float的双指针。 float指针的双指针大小为8。 matrix [0]是浮点数的单个指针。浮点数的单个指针的大小为8。 sizeof float是4.(大多数情况下)

所以我们有

    sizeof(matrix)/sizeof(float *) = 1    //since 8/8 = 1.
    sizeof(matrix[0])/sizeof(float) = 2   //since 8/4 = 2