(void *)&sin是什么呢

yangguang0501 2010-07-25 10:47:21
看到一个程序段里面有 (void *)&sin,不知道是什么意思,是函数吗?
if(connect(csock,(void *)&sin,sizeof(sin)))
errexit("has't connect to the server !:%s\n",strerror(errno));
else
printf("has connect to the server!\n");
...全文
518 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 yangguang0501 的回复:]
为什么要把他转换成void的指针类型呢?或者是说(void*)有什么作用呢?
[/Quote]

个人看法,楼上的兄弟们都说强制转换,但是这个表面谁看不是强制转换嘛^_^,我想楼主主要想知道的是为什么要将地址强制转换void *,这个就要看connect这个函数实现中拿sin做了什么,将地址转成void后,就可以通过这个地址访问自己想访问的数据,我说得笼统,举个例子楼主就知道了
struct a
{
int b;
int c;
}*aa;

char c[10];

经过(aa)c转化后就可以访问b,c了,当然,中间来个转接,比如(void*)c, 然后对(void*)c在转化到自己想要的格式,因为conect函数只是做好借口给你调用,所以就做了个中间转接,函数里面应该就应该对这个void做了另一个强制转换

ryanlq 2010-07-29
  • 打赏
  • 举报
回复
什么书啊,书上有写为什么转void吗,有好处吗。
我一直强制转为struct sockaddr
if(connect(csock,(struct sockaddr *)&sin,sizeof(sin)))
bobo364 2010-07-28
  • 打赏
  • 举报
回复
(void *)&sin

把sin的地址强制转换成void类型指针
nxin2000 2010-07-28
  • 打赏
  • 举报
回复
应该转换成 (struct sockaddr *)&sin
leo9239339 2010-07-28
  • 打赏
  • 举报
回复
取*sin的地址,然后强转为void*型
小枫 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aizibion 的回复:]

取*sin的地址,然后强转为void*型
[/Quote]
yuxiabo1984 2010-07-28
  • 打赏
  • 举报
回复
强制转化
yiruirui0507 2010-07-28
  • 打赏
  • 举报
回复
int connect(
__in SOCKET s,
__in const struct sockaddr *name,
__in int namelen
);
void *)&sin

把sin的地址强制转换成void类型指针
huakaibubai666 2010-07-28
  • 打赏
  • 举报
回复
取地址然后将其转换为(void*)类型。
  • 打赏
  • 举报
回复
吧sin地址转换成void,这样的转换看起来好特别~
vapor_55 2010-07-28
  • 打赏
  • 举报
回复
查一下connect函数的用法,估计就知道了.
yangguang0501 2010-07-28
  • 打赏
  • 举报
回复
为什么要把他转换成void的指针类型呢?或者是说(void*)有什么作用呢?
michael122 2010-07-27
  • 打赏
  • 举报
回复
强制类型转换
zhangweiit 2010-07-27
  • 打赏
  • 举报
回复
&只是转换成地址,“相当于”指针类型
zhangweiit 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zixingamber 的回复:]

这句话怎么理解“通过&把sin转化为指针类型”,&有这个功能吗?

[/Quote]

不好意思,我觉得,是我这句话说得不对,会引起误会
应该这样说
struct sockaddr sin;
sin是普通struct sockaddr类型
&sin相当于是struct sockaddr*类型
"相当于"
zixingamber 2010-07-27
  • 打赏
  • 举报
回复
这句话怎么理解“通过&把sin转化为指针类型”,&有这个功能吗?
[Quote=引用 15 楼 zhangweiit 的回复:]
int connect(
__in SOCKET s,
__in const struct sockaddr *name,
__in int namelen
);

你看到的代码,是winsock里面的connect函数
这是msdn的文档

从(void *)&sin中可以看出
sin的定义应该是这样的
struct sockaddr sin;
而co……
[/Quote]
zhangweiit 2010-07-27
  • 打赏
  • 举报
回复
int connect(
__in SOCKET s,
__in const struct sockaddr *name,
__in int namelen
);

你看到的代码,是winsock里面的connect函数
这是msdn的文档

从(void *)&sin中可以看出
sin的定义应该是这样的
struct sockaddr sin;
而connect 中第二个参数要求的类型是(struct sockaddr *),是一个指针类型
于是,就通过&把sin转化为指针类型
用(void *)的目的在于,void *是一个通用的指针类型,
可以把(void *)转换为任意其它的指针类型,(当然也有可能是不安全的)
漫步者、 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aizibion 的回复:]
取*sin的地址,然后强转为void*型
[/Quote]同感
mymtom 2010-07-27
  • 打赏
  • 举报
回复
还以为sin是函数呢!
东大坡居士 2010-07-27
  • 打赏
  • 举报
回复
强制类型转换~~~~~~
加载更多回复(9)

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧