C 那是固定大小的数组吗?a[]

C 那是固定大小的数组吗?a[],c,arrays,fixed-size-types,C,Arrays,Fixed Size Types,我开始学习C编程 a[20]和a[] 我知道a[20]是一个固定大小的数组,但是a[]怎么样?如果不知道正确的上下文/用法,就不可能提供直接的答案,但是,让我举一些常用情况的例子: 在块作用域中,使用类似于a[]的语法定义的数组 char a[] = "Some Name"; 仍然是一个固定大小的数组。大小是从初始值设定项获得的,例如:上面的数组大小为10(包括空终止符) 另一方面,在函数参数的情况下,类似于a[]的语法 void func (int a[]) 与 void func (in

我开始学习C编程

a[20]
a[]


我知道
a[20]
是一个固定大小的数组,但是
a[]
怎么样?

如果不知道正确的上下文/用法,就不可能提供直接的答案,但是,让我举一些常用情况的例子:

  • 在块作用域中,使用类似于
    a[]
    的语法定义的数组

    char a[] = "Some Name";
    
    仍然是一个固定大小的数组。大小是从初始值设定项获得的,例如:上面的数组大小为10(包括空终止符)

  • 另一方面,在函数参数的情况下,类似于
    a[]
    的语法

    void func (int a[])
    

    void func (int *a)
    
    它不是数组,而是指针

  • 如果此语法显示为具有多个命名成员的结构的最后一个元素,则称为灵活数组成员。它是一个不完整的数组类型。例如:

    struct s { int n; double d[]; };
    

  • 什么是上下文/用法?如果是参数,则是指向第一个元素的指针。如果它是一个定义和初始化(例如,
    inta[]={1,2,3};
    ),它只会告诉编译器计算元素的数量,并使数组正好达到该大小。如果它是
    结构的最后一个成员
    ,则它是一个灵活的数组成员,在结构的其余部分之后分配灵活的大小。还有许多其他情况,如不完整的数组类型、灵活的数组成员等。如你所要求的,这个问题在没有上下文的情况下是无法回答的。@Lundin你说得很对,先生,我试图涵盖常用的案例,但让我扩展以添加更多。同时,我希望OP能像我要求的那样回到背景上来。