(struct sock_address *)&server
просто утверждает: используйте адрес server
, приведенный к «указателю на структуру sock_address».
Вам нужно дать адрес, потому что функция хочет изменить вещи в этой структуре. И приведение просто так, что это правильный тип.
Это не так же, как:
int num = 42;
int num2 = *(&num); // num would be better.
который будет быть двумя отменяющими
Хотя *ptr
разыменовывает ptr
, чтобы дать вам базовое значение, (type *)ptr
вместо этого обрабатывает ptr
, как если бы он был указателем на type
- в последнем случае разыменование отсутствует.