Я изучаю C++ через онлайн-учебники, например, на cprogramming.com, и решил создать простую программу сокетов в качестве моего первого реального проекта. Я уже экспериментировал с основными функциями и понял суть работы C++. Я просто столкнулся с чем-то на прошивке MSDN Winsock2, которая меня смутила.
На этой странице объект с именем hints объявляется из структуры sddrinfo:
struct addrinfo *result = NULL,
*ptr = NULL,
hints;
Я смущен о * result и * ptr = null частях этого объявления. Поскольку нет точек с запятой, я предполагаю, что новые строки предназначены для удобства чтения, и этот код можно записать следующим образом.
struct addrinfo *result = NULL, *ptr = NULL, hints;
Похоже, что мы объявляем два указателя, указывающих на структуру addrinfo
и устанавливаем их в null вместе с объявлением объекта-подсказок. Может ли кто-нибудь объяснить цель установки их в NULL
? И если кто-нибудь знаком с winsock, вы можете объяснить, как и почему используются эти указатели? Почему бы просто не использовать объект подсказок?
Эта строка объявляет несколько переменных в одной строке. Это то же самое, что и это
struct addrinfo *result = NULL;
struct addrinfo *ptr = NULL;
struct addrinfo hints;
Программисты устанавливают указатели на NULL, так что, если вы случайно их разыщите, вы выбросите исключение и найдете свою ошибку. Если вы не инициализируете их, они укажут на нежелательные файлы, которые могут привести к сбою вашего приложения в коварных манерах.
addrinfo *result = NULL;
, и т.д.
getaddrinfo
.