Pointers 有人能给我解释一下这句话吗,也许能给我一个简单快速的演员分类:) 我是C++的新手,可以用下面的句子来澄清:

Pointers 有人能给我解释一下这句话吗,也许能给我一个简单快速的演员分类:) 我是C++的新手,可以用下面的句子来澄清:,pointers,casting,Pointers,Casting,“指向中的结构sockaddr_的指针可以强制转换为指向结构sockaddr的指针,反之亦然。因此,即使connect()需要结构sockaddr*,您仍然可以在最后一分钟使用结构sockaddr_强制转换!” 这句话是什么意思 假设你有 struct sockaddr_in *var; 你有 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 你可以做: connect(fd, (struct s

“指向中的结构sockaddr_的指针可以强制转换为指向结构sockaddr的指针,反之亦然。因此,即使connect()需要结构sockaddr*,您仍然可以在最后一分钟使用结构sockaddr_强制转换!”

这句话是什么意思

假设你有

struct sockaddr_in *var;
你有

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
你可以做:

connect(fd, (struct sockaddr *) var, addrlen);
这是因为这些函数族并不总是在中接收sockaddr_,它们可以接收,例如在6中接收sockaddr_。因此,您可以将这两个指针强制转换为sockaddr,它们将起作用

怎么样?我们的想法是,这些结构的第一个字段是相同的,如果您将它们强制转换为sock_addr,您仍然可以读取第一个字段,而不必执行任何未定义的行为,然后将它们作为该字段定义的特定结构来处理

struct sockaddr {
    unsigned short    sa_family;    // address family, AF_xxx
    char              sa_data[14];  // 14 bytes of protocol address
};

struct sockaddr_in {
    short            sin_family;   // e.g. AF_INET, AF_INET6
    unsigned short   sin_port;     // e.g. htons(3490)
    struct in_addr   sin_addr;     // see struct in_addr, below
    char             sin_zero[8];  // zero this if you want to
};

Sa-族字段与Sun-Car族字段相同,所以在铸造之前,可以知道它是AFAYNET或AFY-ITE6。

1)最可能与C++无关,听起来像C;2) 你不明白哪一部分?多亏了这些精彩的解释,我现在明白了。不过我还有一个问题。当使用IP作为getaddrinfo()的输入时,如何获取域名?我试着把ai_canoname拔出来,但是当我使用ip时,里面似乎没有任何东西,但是如果我使用主机名,它会把ip放在那里。非常感谢,这很有帮助:)