很抱歉这个简单的问题,但我正在度假阅读一本关于核心音频的书,并且没有我的C或Objective C书籍......
这个变量定义中的大括号是什么?
MyRecorder recorder = {0};
答案 0 :(得分:24)
假设MyRecorder
是struct
,这是sets every member to their respective representation of zero(0
表示整数,NULL
表示指针等。)
实际上这也适用于所有其他数据类型,如int
,double
,指针,数组,嵌套结构,...,您可以想象的一切(感谢pmg指出这一点!)< / p>
更新:从上面链接的网站中提取的引用,引用C99的最终草案:
[6.7.8.21]如果括号括起的列表中的初始值设定项较少 比聚合的元素或成员,[...]剩余的 aggregate应该与对象一样隐式初始化 有静态存储时间。
答案 1 :(得分: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;
}
这是输出。
$ ./a.out
0
0
0.000000
答案 2 :(得分:4)
答案 3 :(得分:3)
实际上,它并没有初始化结构的所有元素,只是第一个元素。但是,其他的自动初始化为0,因为这是C标准要求做的。
如果你把: MyRecorder录音机= {3};
第一个元素为3,其他元素为0。
答案 4 :(得分:0)
MyRecorder
可能是以下之一,并且您尝试使用零初始化该元素的所有元素
typedef struct _MyRecorder1 {
int i;
int j;
int k;
}MyRecorder1;
typedef int MyRecorder2[3];
答案 5 :(得分:0)
与C ++ 11不同,在C99中,初始化括号中必须至少包含一个元素。
C ++ 11结构:
MyRecorder recorder{};
C结构:
MyRecorder recorder = {0};