这对我有效(注释解释了为什么):
#include <stdio.h>
int main() {
char result[10][7] = {
{'1','X','2','X','2','1','1'},
{'X','1','1','2','2','1','1'},
{'X','1','1','2','2','1','1'},
{'1','X','2','X','2','2','2'},
{'1','X','1','X','1','X','2'},
{'1','X','2','X','2','1','1'},
{'1','X','2','2','1','X','1'},
{'1','X','2','X','2','1','X'},
{'1','1','1','X','2','2','1'},
{'1','X','2','X','2','1','1'}
};
int total = sizeof(result);
int column = sizeof(result[0]);
int row = total / column;
printf("Total fields: %d\n", total);
printf("Number of rows: %d\n", row);
printf("Number of columns: %d\n", column);
}
这个的输出结果是:
Total of fields: 70
Number of rows: 10
Number of columns: 7
编辑:
如@AnorZaken所指出的那样,将数组作为参数传递给函数并打印sizeof
的结果会输出另一个total
。这是因为当你将数组作为参数传递时(而不是指向它的指针),C语言会在中间应用一些魔法,并将其作为副本传递,因此你传递的不是完全相同的东西。为确保自己的操作以及避免额外的CPU工作和内存消耗,最好通过引用(使用指针)来传递数组和对象。因此,你可以使用以下代码,与原始代码产生相同的结果:
#include <stdio.h>
void foo(char (*result)[10][7])
{
int total = sizeof(*result);
int column = sizeof((*result)[0]);
int row = total / column;
printf("Total fields: %d\n", total);
printf("Number of rows: %d\n", row);
printf("Number of columns: %d\n", column);
}
int main(void) {
char result[10][7] = {
{'1','X','2','X','2','1','1'},
{'X','1','1','2','2','1','1'},
{'X','1','1','2','2','1','1'},
{'1','X','2','X','2','2','2'},
{'1','X','1','X','1','X','2'},
{'1','X','2','X','2','1','1'},
{'1','X','2','2','1','X','1'},
{'1','X','2','X','2','1','X'},
{'1','1','1','X','2','2','1'},
{'1','X','2','X','2','1','1'}
};
foo(&result);
return 0;
}
int column = sizeof(result[0])/sizeof(result[0][0]);
- BLUEPIXY