如何在C中找到多维数组的维数

ZZ *_*der 5 c arrays multidimensional-array

我宣布了一个像这样的二维数组:

char *array[][3] = {
    {"a", "b", "c"},
    {"d", "e", "f"},
    {"u", "v", "w"},
    {"x", "y", "z"}};
Run Code Online (Sandbox Code Playgroud)

我如何找到第一个维度?

Dig*_*oss 11

sizeof array/sizeof数组[0]

示例:*

#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;
}
Run Code Online (Sandbox Code Playgroud)


*如果操作数是a type-name,则需要parens ,即使sizeof操作符不是函数.但是每个type-name出现在C语法中的地方(声明者都没有使用那个作品)那么就需要在它周围使用parens.因为没有一个类型名称中,括号中使用的各种C语言规格的半正式语法一个独立的生产,他们指定定义的东西,如生产所需的括号sizeof,generic-associationscast-expressions.但是那些parens确实存在,以便能够解析表达式语法中的类型.它们是你可能称之为"类型表达式"的语法的一部分,但考虑到这些东西的使用有限,它们实际上并没有任何这样的产生或术语.

  • 围绕"sizeof"操作数的parens对于表达式来说是不必要的(在这种情况下,parens只是表达式的更多).但是,如果sizeof运算符的操作数是一个类型,则它们是必需的. (3认同)
  • 另外 - 即使使用表达式作为`sizeof`的操作数,我也非常喜欢parens,因为那时我不必担心记住sizeof运算符的优先级.我很难记住"加法和减法之前的乘法和除法". (3认同)