У меня есть некоторые замешательства по поводу того, что я читал со следующего сайта о memcpy()
(и malloc()
):В C, лидирует (void *) не требуется/не рекомендуется для memcpy() так же, как это не требуется для malloc()?
http://www.cplusplus.com/reference/cstring/memcpy/
В этой странице, следующие 2 строки четко указаны:
назначения
Pointer to the destination array where the content is to be copied, type-casted to a pointer of type void*.
источник
Pointer to the source of data to be copied, type-casted to a pointer of type const void*.
Но сразу же после этого, в коде, не отливка void*
в следующих двух строках, где memcpy()
используется:
memcpy (person.name, myname, strlen(myname)+1);
memcpy (&person_copy, &person, sizeof(person));
Пожалуйста, ответьте на следующие 2 вопроса возникающие из этого помещения:
1) В случае C (в отличие от C++) все это право и желательно не бросать в void*
типа возвращаемого или аргументы в memcpy()
так же, как это правильно и желательно не бросать в void*
возвращаемого типа malloc()
в C? Если это так, как я интуитивно чувствую, почему явно указано в том, что известный сайт, который нам нужен , должен отдать его void*
(хотя он и не использует его в коде). Это сайт неправильно?
2) Теперь реальное противоречие о том, что известного site.Consider следующего
http://www.cplusplus.com/reference/cstdlib/malloc/
В случае malloc()
, в описании написано, как будто это optional
приведения к void*
тип возврата (точные слова «.. can be cast to the desired type
..»), в отличие от случая memcpy()
выше, где сказано, что должен быть брошен вvoid*
.Но в то время как memcpy()
отливка не делается, даже если написано, что it is to be cast
, в случае malloc()
, отливка в void*
делается несмотря на то, что написано это can be cast to void*
.Теперь я вижу что-то неправильное в этом, как и для C мы не предполагается литье malloc()
's возврат к void*
.
Навести расхождение в двух словах снова чтобы люди, отвечая запутаться в моем словесном описании:
--Is это желательно в C не приведение к void*
возвращению и аргументов в memcpy()
?
- Этот сайт ошибочен в отношении malloc()
, поскольку он отличает malloc()
. Возврат к void*
в коде C.
'malloc' и' memcpy' имеют только предельное существование в C++, он существует в основном для совместимости с C. C++ имеет разные конструкции, которые лучше вписываются в их систему типов. Поэтому лучше не использовать сайт C++ в качестве ссылки для C. Это просто другое. –
@JensGustedt Это перешло мне в голову, но когда я увидел, что сама программа находится на C, я подумал, что это говорит о случае C. –
@JensGustedt. Все программы в разделе «Стандартная библиотека» C находятся в C. –