" Какими будут значения 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));