В C ли бросок из char * void * делает что-нибудь? - PullRequest
2 голосов
/ 07 мая 2010

Пожалуйста, посмотрите на приведенный ниже фрагмент кода и скажите мне разницу?

int main()
{
struct sockaddr_in serv_addr, cli_addr;
/* Initialize socket structure */
    bzero((char *) &serv_addr, sizeof(serv_addr));
}

Теперь, что если я сделаю что-то похожее без приведения типов (char *), то я также чувствую, что это будет делать то же самое? Может кто-нибудь уточнить?

/* Initialize socket structure */
bzero( &serv_addr, sizeof(serv_addr));

Ответы [ 2 ]

4 голосов
/ 07 мая 2010

Так как первый параметр - void *, вам нужно только привести в C ++.

В C это не обязательно, так как void * был введен 1 именно так, чтобывам не нужно приводить его к другому объекту или указателю 2 .(Аналогично malloc() и другим функциям, которые имеют дело с void * с)


  1. В C89.
  2. Любой нефункциональный указатель.
2 голосов
/ 07 мая 2010

Приведение не требуется, поскольку bzero() принимает void* в качестве первого аргумента, а AnyType* может быть неявно преобразовано в void*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...