Выделить структуру по вызову c (): Каким значением инициализируются члены? - PullRequest
0 голосов
/ 06 мая 2020

Например, у меня есть struct

struct s{
    char c;
    int x;
};

И я использую calloc() для выделения памяти.

s *sp = (s*) calloc(1, sizeof(s));

Сейчас , какие будут значения sp->c и sp->x?

1 Ответ

2 голосов
/ 06 мая 2020

" Какими будут значения sp->c и sp->x? "

Поскольку calloc() устанавливает все биты выделенной памяти в 0, c и x будут иметь значение 0, если 0 представление значения int и char всех битов равно 0 (что является общим).

Обратите внимание, что в случае указателей указатель может не соответствовать стандарту NULL указатель при простой установке всех битов в 0, поскольку стандарт C не требует, чтобы представление указателей NULL было все нулевые биты.


Примечания:

1.

struct s{
    char c;
    int x;
};

s *sp = (s*) calloc(1, sizeof(s));

не может работать как s isn´ta typedef d тип; это структурный тег. Следовательно, перед s должно стоять ключевое слово struct:

struct s *sp = (struct s*) calloc(1, sizeof(struct s));

2.

Вам не нужно приводить возвращаемый указатель из calloc() и других средств управления памятью. функций и лучше избегать этого, поскольку это может добавить беспорядок в ваш код. -> Приведу ли результат mallo c

Итак, просто выполните:

struct s *sp = calloc(1, sizeof(struct s));
...