t3st3r
написал 24 июля 2006 года в 08:01 (820 просмотров)
Ведет себя
неопределенно; открыл 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 декабря 2023 года в 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
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.
По поводу можно или нельзя, если компилятор ругается то нельзя, если нет то можно (честно говоря не помню ,как на это смотрит gcc).
В принципе они все void*, поэтому разницы быть не должно, вот если бы умный компилятор выбирал специфический malloc для разных типов данных, то может быть плюс бы и был (в виде правильного смещения), но это сомнительно.
Признаком хорошего тона является как раз не приводить.
Если компилятор ругается — это верный признак того, что ты не подключил нужный header, где написано, что malloc возвращает void *. Приводить типы в данном случае — прятать голову в песок.
Если же все подключено, то можно и привести — проблем не будет, конечно, но вот программист, читающий твой код, насторожится — а зачем это тебе понадобилось обманывать компилятор?
В С лучше не приводить, потому что void * автоматически приводится к type * и наоборот. А вот в С++ приводить надо, ибо проверка типов более жёсткая. Хотя в С++ лучше использовать new.
Feuerbach, myst, iliya, Большое спасибо, наконец-то понятно объяснили! THX.