Извините за простой вопрос, но я в отпуске, читаю книгу по основному звуку, и у меня нет с собой книг по C или Objective C ...
Что делают фигурные скобки в это определение переменной?
MyRecorder recorder = {0};
Предполагая, что MyRecorder
является struct
, этот устанавливает для каждого члена их соответствующее представление нуля (0
для целых чисел, NULL
для указателей и т. Д.).
На самом деле это также работает со всеми другими типами данных, такими как int
, double
, указатели, массивы, вложенные структуры, ..., все, что вы можете себе представить (спасибо pmg за это!)
ОБНОВЛЕНИЕ : цитата, извлеченная из веб-сайта, указанного выше, со ссылкой на окончательный вариант C99:
[6.7.8.21] Если в списке, заключенном в фигурные скобки, меньше инициализаторов чем есть элементы или члены агрегата, [...] остальная часть агрегата должна быть неявно инициализирована так же, как объекты, которые имеют статическую длительность хранения.
Его инициализация всех членов recorder
структуры в 0
в соответствии со стандартом C99. Может показаться, что он инициализирует каждый бит структуры с 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
На самом деле, он не инициализирует все элементы структуры, только первый. Но остальные автоматически инициализируются с 0, потому что это то, что стандарт C просит сделать.
Если вы установите: MyRecorder рекордер = {3};
Первый элемент будет 3, а остальные - 0.
MyRecorder
может быть одним из следующих, и вы пытаетесь инициализировать все элементы этого с нуля
typedef struct _MyRecorder1 {
int i;
int j;
int k;
}MyRecorder1;
typedef int MyRecorder2[3];