为什么在发送的时候要把一个结构体指针强转成char*类型的指针呢,这样转过后,pStr指向的又是什么内容
struct struCommPacket{ int PackLength; int command; int data_length; BYTE* command_data; }; int main(int argc,char * argv[]) { struct struCommPacket *pStr; struct struCommPacket Str = {10, 11, 12, "hello"}; pStr = &Str; //sockfd = socket(..)...... //.... send(sockfd, <SPAN style="COLOR: #ff0000">(char *)pStr</SPAN>, sizeof(struct struCommPacket), MSG_NOSIGNAL);
如上面,建立socket通信后发送一个结构体过去,但为什么在发送的时候要把一个结构体指针强转成char*类型的指针呢,这样转过后,pStr指向的又是什么内容???这里不是很懂啊,高手在哪里....!!
如果函数的参数要求这样,那么就是正确的,至于send会把它变成什么类型,可以忽略,这就是接口
接口是void*,所以随便传什么类型的参数都是ok的,但是,把它强转成char*过后,这个指针指向的内容是什么呢,也就是说这时发送的内容是什么?毕业论文 (char *)pStr:这里用不用char *强制转化都无所谓,send函数发送从pStr指向的地址开始的,大小为sizeof(struct struCommPacket)的连续内存上的数据;
pStr指向的始终是结构体Str = {10, 11, 12, "hello"};的首地址,不管用什么类型来强制转化pStr,它一直指向Str的首地址不变,只是引用方式变了;
打印指针是printf("%p\n", pStr);,%s是打印字符串;
|