我宣布了一个像这样的二维数组:
char *array[][3] = {
{"a", "b", "c"},
{"d", "e", "f"},
{"u", "v", "w"},
{"x", "y", "z"}};
如何查找第一个维度?
答案 0 :(得分:11)
示例: *
#include <stdio.h>
int main(void) {
int array[4];
printf("%zd\n", sizeof array / sizeof array[0]);
printf("%zd\n", sizeof (int));
printf("%ld\n", (long)(sizeof array / sizeof array[0]));
return 0;
}
<小时/> *如果操作数是
type-name
,则需要parens,即使sizeof
是运算符而不是函数。但是在C语法中出现type-name
的每个地方(声明者都不使用该生产),然后需要在其周围进行填充。因为在用于各种C规范的半正式语法中没有单独的for-name-in-parens生成,所以它们在定义sizeof
,{{generic-associations
之类的内容的作品中指定所需的parens。 1}}和cast-expressions
。但是那些parens确实存在,以便能够解析表达式语法中的类型。它们是你可能称之为“类型表达式”的语法的一部分,但考虑到这些东西的使用有限,它们实际上并没有任何这样的产生或术语。
答案 1 :(得分:4)
你为什么不给:
sizeof(array) / sizeof(char*) / 3
一枪?
这假设您知道数据类型(char *)和其他维度(3)。
您可以将结构的大小除以每个元素的大小以获得元素的总数,然后将其除以第一个维度,得到第二个维度。
除了:我的原始答案使用'sizeof("a")'
当然是错误的,因为它是数组的大小(2,是'a'和'\ 0') ,而不是指针(我可怕的过时的32位机器上的4)。但我喜欢我得到两个赞成错误答案的方式 - 在投票之前,你不是真的在这里检查答案吗? : - )