我试图找到一种方法来查找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;作为输出。我不确定自己做错了什么?
答案 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