#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void find_col_num(int matrix[][5])
{
printf("size of matrix = %d\n",sizeof(matrix));
printf("size of one element = %d\n", sizeof(matrix[0][0]));
printf("number of columns = %d\n", sizeof(matrix)/(sizeof(matrix[0][0])*5));
}
int main()
{
int a[6][5] = { {0,0,0,0,0},
{0,1,1,1,1},
{1,0,1,0,0},
{1,0,1,0,0},
{1,0,1,0,0},
{0,1,1,1,1} };
find_col_num(a);
printf("\n\n\n");
printf("size of a = %d\n",sizeof(a));
printf("size of one element = %d\n", sizeof(a[0][0]));
printf("number of columns = %d\n", sizeof(a)/(sizeof(a[0][0])*5));
return 0;
}
输出:
size of matrix = 8
size of one element = 4
number of columns = 0
size of a = 120
size of one element = 4
number of columns = 6
我想在void或int函数中使用sizeof来确定矩阵的列数。我知道我必须在函数中指定矩阵的行号。我该如何处理?
参数,int matrix[][5]
传递给函数时,decays指向指向int
的指针。这就是为什么它的大小为8(系统中指针的大小)的原因。
因此,计算出的列数不是您期望的。
[恐怕在不更改find_col_num ()
签名的情况下没有机会获得您想要的东西。最好的方法可能是将矩阵的总大小传递给函数:
void find_col_num(int matrix[][5], size_t tot_size)
{
/* ... */
}
您可以这样称呼它
find_col_num(a, sizeof(a));