在C中奇怪使用花括号

Joh*_*ohn 29 c structure initialization objective-c

很抱歉这个简单的问题,但我正在度假阅读一本关于核心音频的书,并没有我的C或Objective C书籍...

这个变量定义中的花括号是什么?

MyRecorder recorder = {0};
Run Code Online (Sandbox Code Playgroud)

Nik*_* B. 24

假设它MyRecorder是a struct,这将每个成员设置为它们各自的零表示(0对于整数,NULL对于指针等).

其实这也适用于所有其它数据类型一样int,double,指针,数组,嵌套结构,...,所有你能想象(感谢PMG指出这一点!)

更新:从上面链接的网站中提取的引用,引用C99的最终草案:

[6.7.8.21]如果括号括起的列表中的初始值设定项少于聚合的元素或成员,则聚合的其余部分应与具有静态存储持续时间的对象隐式初始化.


Shi*_*dim 9

它按照C99标准初始化所有recorder结构成员0.看起来它似乎用0位初始化结构的每一位.但对于每个编译器而言都不是这样.

看到这个示例代码,

#include<stdio.h>

struct s {
    int i;
    unsigned long l;
    double d;
};

int main(){
    struct s es = {0};
    printf("%d\n", es.i);
    printf("%lu\n", es.l);
    printf("%f\n", es.d);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出.

$ ./a.out 
0
0
0.000000
Run Code Online (Sandbox Code Playgroud)


小智 5

实际上,它并没有初始化结构的所有元素,只是初始化第一个元素。但是,其他的会自动初始化为 0,因为这是 C 标准要求的。

如果你输入:MyRecorder录音机={3};

第一个元素为 3,其他元素为 0。