谁能告诉我它们的区别:
target_addr.sin_addr = *(struct in_addr *)(target->h_addr_list[0]);
这效果很好。target_addr.sin_addr.s_addr = (无符号整数)(*(target->h_addr));
//h_addr = h_addr_list[0]
这行没有任何语法错误,但我不知道它是否有效。target_addr.sin_addr.s_addr = *(struct in_addr *)(target->h_addr_list[0])->s_addr;
为什么这条线不起作用?我觉得这行的意思和上面两行一模一样……
变量来自:
struct hostent *target;
struct sockaddr_in target_addr;
最佳答案
我并不完全熟悉这些结构,但我可以对这些指针进行评论。小心所有的转换 - 您真的确定h_addr
正在存储您认为的内容吗?
在你的第三行代码中,s_addr
不是一个指针,并且你试图像指针一样取消引用它。你的三行代码的含义不同。
在这里,您将转换
target->h_addr_list[0]
到一个指针
struct in_addr
。转换之后,您现在正在操作指针
到struct in_addr
。然后,您取消引用该指针
,加载 将值写入sin_addr
。在这里,您取消引用
target->h_addr
(作为某人 提到的是target->h_addr_list[0]
的别名),然后 将其转换为无符号整数。在这里,您将转换
target->h_addr_list[0]
到指针
struct in_addr
,到目前为止,与 #1 相同。然后,您访问该字段struct in_addr
的s_addr
。这次访问的结果是struct in_addr.s_addr
的值。
然后,您尝试取消引用该值,但它不是指针
。我假设您遇到了间接相关错误?
关于c - 关于C中指向指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29291821/