t3st3r
написал 24 июля 2006 года в 08:01 (796 просмотров)
Ведет себя
неопределенно; открыл 11 тем в форуме, оставил 14 комментариев на сайте.
Есть код, где для переменной выделяется память через malloc:
…
float *t;
int i, n;
printf(«Enter num of rows: »);
scanf(«%d», &n);
t = (float *)malloc(n*sizeof(float));
for(i=0; i
printf(«x[%d] = », i);
scanf(«%f», &t);
}
…
Так вот, (float *) можно опустить, и мне интересно, это принципиально или нет, нужно ли всегда приводить к типу или нет?
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
По поводу можно или нельзя, если компилятор ругается то нельзя, если нет то можно (честно говоря не помню ,как на это смотрит gcc).
В принципе они все void*, поэтому разницы быть не должно, вот если бы умный компилятор выбирал специфический malloc для разных типов данных, то может быть плюс бы и был (в виде правильного смещения), но это сомнительно.
Признаком хорошего тона является как раз не приводить.
Если компилятор ругается — это верный признак того, что ты не подключил нужный header, где написано, что malloc возвращает void *. Приводить типы в данном случае — прятать голову в песок.
Если же все подключено, то можно и привести — проблем не будет, конечно, но вот программист, читающий твой код, насторожится — а зачем это тебе понадобилось обманывать компилятор?
В С лучше не приводить, потому что void * автоматически приводится к type * и наоборот. А вот в С++ приводить надо, ибо проверка типов более жёсткая. Хотя в С++ лучше использовать new.
Feuerbach, myst, iliya, Большое спасибо, наконец-то понятно объяснили! THX.