C++中的Socket connect()函数解释/ Reference operator and Pointers

Socket connect() function explanation in C++/ Reference operator and Pointers

我是编程新手,想更好地了解这个套接字函数 connect()。我已经阅读了很多描述,但我无法理解这种语法:

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen)

说明:addr 参数是一个指向指定此套接字要绑定到的地址的结构的指针。

这是我学习代码的一部分:

  connect(socket_desc ,( struct sockaddr *) &server , sizeof(server)) < 0)

谁能解释一下为什么括号中有一个指针运算符和后面的引用运算符的结构?

Can anyone explain why there is a structure in parentheses with a pointer operator and the reference operator after it?

圆括号用于类型转换,& 符号是运算符的地址。该代码正在获取结构变量的内存地址,可能是 sockaddr_insockaddr_in6 但可以是任何 sockaddr 兼容的结构,然后将该内存地址类型转换为 sockaddr指针。

套接字支持多种不同类型的寻址方案,并且为每种方案定义了不同的 sockaddr_... 结构类型。但是处理地址的socketAPI函数只接受sockaddr*参数,所以需要进行类型转换。

该行的 ( struct sockaddr *) &server 部分可以用英语描述为:

获取对象 server 的地址,并将该内存地址(或指针)视为指向 sockaddr 对象的指针。

& 运算符,至少在这种情况下,正在获取后面标识符的内存地址。以 (type) 开头的表达式是该类型的 'cast'。在 C 中,这是类型转换的唯一形式。 C++ 继承了该功能,但在大多数 C++ 代码中不鼓励使用其他转换操作(static_cast、dynamic_cast、const_cast、reinterpret_cast)。