【发布时间】:2020-05-10 12:53:53
【问题描述】:
#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 来确定矩阵的列数。我知道我必须在函数中指定矩阵的行数。我该如何处理?
【问题讨论】:
-
函数
find_col_num无法知道其参数的大小。除非它是全球已知的,否则您必须将其作为另一个参数传递。事实上,它可以是任何大小,只要您不超出数组边界。没有给出外部尺寸的尺寸,即使有,也不是限制性的。给出一维的唯一原因是编译器知道如何索引二维数组。 -
好吧...我该如何处理呢?对不起,我是 C 的新人。
-
传递给函数的数组衰减为指针,这是编译器知道的。如果它是一个足够信息的一维数组。这是一个二维数组,因此编译器需要知道每行的宽度。这就是为什么给出内部维度。请注意,对于一维数组,即使您声明了维度,编译器也会忽略它。同样,这里的二维数组也没有外维度,因为数组的大小是无限的。
-
您必须将外部维度中的元素数量传递给函数。顺便说一句,您知道数组的大小,因为您是定义它的人。假设您使用
malloc分配内存。人们在这里问“内存的大小是多少?”唯一可能的答案是“你告诉它分配的大小”。 -
好吧..如何在void函数中再次分配内存?