收录日期:2020/10/30 23:43:37 时间:2016/07/25 21:21:22 标签:C语言
看到一个程序段里面有  (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");
取*sin的地址,然后强转为void*型
类型转换,把sin的地址结构转换成void*类型。
取*sin的地址,然后强转为void*型,
使用的时候可以再转换回去
取得sin的地址,然后强制转换成void*类型
楼上的都已经说了.
吼吼.
就是一个地址结构类型的变量,取地址后转化为void指针
该回复于2010-07-28 14:36:59被版主删除
把指向sin的指针转换为void *类型。
应该是connect第二个参数是void *,于是做上面的强制转换吧
sin 在什么地方呢?贴出来,否则大家也不知道它是什么东西呀
强制类型转换
强制类型转换~~~~~~
还以为sin是函数呢!
引用 1 楼 aizibion 的回复:
取*sin的地址,然后强转为void*型
同感
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 *)转换为任意其它的指针类型,(当然也有可能是不安全的)
这句话怎么理解“通过&把sin转化为指针类型”,&有这个功能吗?
引用 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……
引用 16 楼 zixingamber 的回复:
这句话怎么理解“通过&把sin转化为指针类型”,&有这个功能吗?


不好意思,我觉得,是我这句话说得不对,会引起误会 
应该这样说
struct sockaddr sin;
sin是普通struct sockaddr类型
&sin相当于是struct sockaddr*类型
"相当于"
&只是转换成地址,“相当于”指针类型
强制转化 
引用 1 楼 aizibion 的回复:
取*sin的地址,然后强转为void*型
取*sin的地址,然后强转为void*型
应该转换成 (struct sockaddr *)&sin
(void *)&sin

把sin的地址强制转换成void类型指针
为什么要把他转换成void的指针类型呢?或者是说(void*)有什么作用呢?
查一下connect函数的用法,估计就知道了.
吧sin地址转换成void,这样的转换看起来好特别~
取地址然后将其转换为(void*)类型。
int connect(
  __in SOCKET s,
  __in const struct sockaddr *name,
  __in int namelen
);
void *)&sin

把sin的地址强制转换成void类型指针
什么书啊,书上有写为什么转void吗,有好处吗。
我一直强制转为struct sockaddr
if(connect(csock,(struct sockaddr *)&sin,sizeof(sin)))
引用 24 楼 yangguang0501 的回复:
为什么要把他转换成void的指针类型呢?或者是说(void*)有什么作用呢?


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

char c[10];

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

高分相送,关于WIN2000底下串口和并口的问题! 个人网站访问量太少了,散分 高分相送,关于WIN2000底下串口和并口的问题! 二值图象处理问题 今天又到外面瞎逛了一天,心情开始平静,我为她祝福,希望她过的快乐,开心,幸福! 怎样格式化输出字符串? 关于js菜单,当选择了一项后,希望菜单保留,重新打开一张网页? 对不起各位,我想问个图片加密的问题! 急!!struts标签问题? 有个问题请教,关于useBean,我是初学者,问题应该不难,但我却不会:( 什么是vc.net? eclipse+lomboz的问题,高手帮忙!! 声卡里采样出来的数据是怎样的数据? 数据库问题在线等待,请帮帮忙! 各位老大,这个问题怎么解决,我觉得自己特白痴,刚用.net不久! 有谁精通C#窗体编程中的剪切板? cpu占用99%? 找到一个好东西,特与各位分享 如何将一个方案下的表转移到另一方案下? 在线等待中...ASP.net问题,高手请进。 2000的煤体文件怎么了 我的2000怎么关机出了问题 关于程序员考试? 问个问题.怎么有的网站的JavaScript代码看不到? 只有60分了,简单问题 一个很基础的问题(高分) 谁有XP的激活代码越多越好??急,在线等!!!多谢大家!!!对的一定给分!! 怎么在退出程序时出现提示框? 我是菜鸟,敬请各位高手指点一下 关于DSN的问题?