Пояснить сложные преобразования указателей - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! разбираюсь с программированием TCP, читаю книгу на эту тему, встретил очень замудренную конструкцию присвоения:
struct sockaddr_in *sap;
struct servent *sp; 
struct hostent *hp; 
...
sap->sin_addr = *( struct in_addr * )hp->h_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();
}

Объяснение кода листинга программы

  1. struct sockaddr_in *sap; - Объявление указателя на структуру sockaddr_in. Структура sockaddr_in используется для хранения информации о сетевом адресе.
  2. struct servent *sp; - Объявление указателя на структуру servent. Структура servent используется для хранения информации о сервисе в сети.
  3. struct hostent *hp; - Объявление указателя на структуру hostent. Структура hostent используется для хранения информации о хосте (узле сети).
  4. WSADATA wsa; - Объявление переменной типа WSADATA. Переменная wsa используется для хранения данных, связанных с Winsock DLL.
  5. void main() - Функция main является точкой входа в программу. В данном случае, функция не принимает аргументов и возвращает void.
  6. WSAStartup(MAKEWORD(2,2),&wsa); - Функция WSAStartup инициализирует библиотеку Winsock DLL. В данном случае, используются версии Winsock 2.2.
  7. hp=gethostbyname(google.com); - Функция gethostbyname возвращает указатель на структуру hostent, содержащую информацию о хосте по его имени.
  8. printf(%x-%s-%s,hp,hp->h_name,*hp); - Функция printf выводит информацию о хосте на консоль. Выводится значение указателя hp, имя хоста из поля h_name структуры hostent и значение поля h_addr структуры hostent.
  9. getch(); - Функция getch приостанавливает выполнение программы до нажатия клавиши.
  10. Код не содержит обработки ошибок.

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы