地址转换函数 struct in_addr { unsigned long int s_add-6ren">
gpt4 book ai didi

c - 为什么我必须在 &ip_reply->saddr 中使用 "&"

转载 作者:行者123 更新时间:2023-11-30 20:02:24 25 4
gpt4 key购买 nike

我使用一个程序从收到的数据包中提取源地址。但我不明白以下代码中 & 运算符的使用:

==>地址转换函数

struct in_addr {
unsigned long int s_addr; }

char *inet_ntoa(struct in_addr in);

==>接收数据包

recvfrom(sockfd, buffer, sizeof(struct iphdr) + sizeof(struct icmphdr), 0, (struct sockaddr *)&connection, &addrlen)) == -1)

===>显示源地址

struct iphdr* ip_reply;

/*code */

ip_reply = (struct iphdr*) buffer;

/*code */

printf("RCV ip->daddr = %s \n",inet_ntoa(*((struct in_addr *)&ip_reply->saddr)));

为什么我必须在 &ip_reply->saddr 中使用 &

最佳答案

这是地址运算符。它接受操作数并返回操作数的地址,换句话说,它返回指向操作数的指针。

在本例中,代码创建一个指向 ip_reply->saddr 的指针,将其类型转换为指向 struct in_addr 的指针,然后取消引用该指针。这是一种将任意数据从一种类型转换为另一种类型的方法。

关于c - 为什么我必须在 &ip_reply->saddr 中使用 "&",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17486771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com