Пояснить сложные преобразования указателей - C (СИ)
Формулировка задачи:
Здравствуйте!
разбираюсь с программированием TCP, читаю книгу на эту тему, встретил
очень замудренную конструкцию присвоения:
помогите расшифровать вот эту конструкцию -> *( struct in_addr * )hp->h_addr
struct sockaddr_in *sap; struct servent *sp; struct hostent *hp; ... sap->sin_addr = *( struct in_addr * )hp->h_addr; ...
Решение задачи: «Пояснить сложные преобразования указателей»
textual
Листинг программы
struct sockaddr_in *sap; struct servent *sp; struct hostent *hp; WSADATA wsa; void main() { WSAStartup(MAKEWORD(2,2),&wsa); hp=gethostbyname("google.com"); printf("%x-%s-%s",hp,hp->h_name,*hp); getch(); }
Объяснение кода листинга программы
struct sockaddr_in *sap;
- Объявление указателя на структуруsockaddr_in
. Структураsockaddr_in
используется для хранения информации о сетевом адресе.struct servent *sp;
- Объявление указателя на структуруservent
. Структураservent
используется для хранения информации о сервисе в сети.struct hostent *hp;
- Объявление указателя на структуруhostent
. Структураhostent
используется для хранения информации о хосте (узле сети).WSADATA wsa;
- Объявление переменной типаWSADATA
. Переменнаяwsa
используется для хранения данных, связанных с Winsock DLL.void main()
- Функцияmain
является точкой входа в программу. В данном случае, функция не принимает аргументов и возвращает void.WSAStartup(MAKEWORD(2,2),&wsa);
- ФункцияWSAStartup
инициализирует библиотеку Winsock DLL. В данном случае, используются версии Winsock 2.2.hp=gethostbyname(
google.com);
- Функцияgethostbyname
возвращает указатель на структуруhostent
, содержащую информацию о хосте по его имени.printf(
%x-%s-%s,hp,hp->h_name,*hp);
- Функцияprintf
выводит информацию о хосте на консоль. Выводится значение указателяhp
, имя хоста из поляh_name
структурыhostent
и значение поляh_addr
структурыhostent
.getch();
- Функцияgetch
приостанавливает выполнение программы до нажатия клавиши.- Код не содержит обработки ошибок.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д