博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Linux C编程问题 (struct sockaddr*)&addr 强制转换
阅读量:6159 次
发布时间:2019-06-21

本文共 958 字,大约阅读时间需要 3 分钟。

很久前写的了,现在搬到这来了,现在看看此问题确实不是什么大问题~~

 

在Linux  C 编程中 经常遇到的一个让我有点费解的看似不难的一个小问题,,,求解释。
答:如在SOCKET编程中的函数int bind(int sockfd,struct sockaddr*myaddr,int addrlen)中的的二个参数struct sockaddr*myaddr是一个指向结构体的指针,对吧?调用bind()程序如下bind(sockfd,(struct sockaddr*)&addr,sizeof(struct sockaddr_in))  ,(addr是自己定义的一个struct sockaddr_in结构体)
-------------------------------
我想问 (struct sockaddr*)&addr是什么意思???为什么前面加上(struct sockaddr*)???
是强制转换吗???强制转换成什么???为什么要强制转换???直接&addr不可以吗???
答:struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。
int bind(int sockfd,struct sockaddr*myaddr,int addrlen);
声明了此种结构体,避免编译警告,强制类型转换。对于追求完美的程序员肯定要避免任何警告。严谨的代码风格。虽然两个结构体是两种概念的统一表达方式。具体参考apue socket编程。
++++刚刚又看了会书和代码,再看看你给的这些解释,感觉思维通了~  在定义addr时,使用的是struct sockaddr_in addr,而函数bind()中的那个参数是struct sockaddr类型指针,所以要强制转换下  避免产生警告。

 

 

转载于:https://www.cnblogs.com/XBin/archive/2012/12/16/2853626.html

你可能感兴趣的文章
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>
Maven编译时跳过Test
查看>>
Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
查看>>
Apache通过mod_php5支持PHP
查看>>
java学习:jdbc连接示例
查看>>
Silverlight 如何手动打包xap
查看>>
禁用ViewState
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>
nilfs (a continuent snapshot file system) used with PostgreSQL
查看>>
【SICP练习】150 练习4.6
查看>>
HTTP缓存应用
查看>>
KubeEdge向左,K3S向右
查看>>
DTCC2013:基于网络监听数据库安全审计
查看>>
CCNA考试要点大搜集(二)
查看>>
ajax查询数据库时数据无法更新的问题
查看>>
Kickstart 无人职守安装,终于搞定了。
查看>>
linux开源万岁
查看>>
linux/CentOS6忘记root密码解决办法
查看>>
25个常用的Linux iptables规则
查看>>