700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言中结构体的强制类型转换

C语言中结构体的强制类型转换

时间:2022-08-18 23:59:43

相关推荐

C语言中结构体的强制类型转换

最近在学习C语言中的Socket,遇到了结构体强制类型转换的问题,在这里记录一下。

我们看一个例子

struct sockaddr_in seraddr;memset(&seraddr, 0, sizeof(seraddr));seraddr.sin_family = AF_INET;seraddr.sin_addr.s_addr = htonl(INADDR_ANY);seraddr.sin_port = htons(atoi(argv[1]));//此处将结构体sockaddr_in强制转换为sockaddrif (bind(listenfd, (struct sockaddr *)&seraddr, sizeof(seraddr)) != 0){perror("bind");close(listenfd);return -1;}

在这里例子中bind函数的第二个参数将结构体sockaddr_in强制转换为结构体sockaddr,但是为什么不直接转换,而是用指针转换?

这里记录一下答案:

C语言中的结构体无法直接进行强制类型转换,需要借助结构体指针进行转换。

为什么不能直接强制类型转换?

因为结构体里的成员数据类型不同,因此占用的字节数不一定相同,直接类型转换可能会导致数组越界。

但是指针转换类型就没什么问题了,因为指针占用的字节数都是相同的。

因此,需要取sockaddr变量的地址当做指针,并把该指针转化成sockaddr_in类型的指针,这样就完成了类型转换。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。