И это не сработает, потому что дефайн закрыли точкой-с-запятой. Итого вышло:
int;* a = (int*)malloc(10*sizeof(int));
И чем же это будет более правильно?
1) int a[10] не будет инициализирован нулями. Чтобы он был инициализирован, нужно хотя бы написать int a[10] = {0}; (в с++ все сложнее, но тут вроде речь о С)
Ваш же calloc предоставит гарантированно обнуленную память
2) calloc, как и все средства выделения памяти в С, возвращает void*. Вы не можете просто так положить его в int*, нужен каст (ЕМНИП, некоторые компиляторы позволяют сделать это без каста, но это все равно неправильно)
3) Если вы намекаете на то, что у calloc'a есть явное указание количества элементов, как и у массива — ну, а на что оно влияет? Так или иначе размер указывается через sizeof, а не просто через количество элементов.
И размер выделенного массива у calloc и у malloc все равно будет одинаковый.
Кроме того, оба варианта неправильные, потому что при объявлении "int a[10]" тип переменной совсем не int*. Правильный тип переменной: int (*const)[10].
/zanuda_mode off
IT-юмор
5.6K постов52.5K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору