
这几天在学习socket编程,遇到memset初始化结构体的问题,在这里记录一下。
看来一个问题
struct sockaddr_in seraddr;
memset(&seraddr, 0, sizeof(seraddr));
memset将结构体初始化为0,到这里都没什么问题。
可是将seraddr结构体初始化那memset的第一个参数为什么是&seraddr,而不是seraddr?
经过一番搜索后找到了答案如下:
不论是我们定义普通的变量还是结构体变量,对应的变量都代表两种含义:
- 变量本身的值
- 变量存放的首地址
一个变量有两种含义这样就不方便使用了,因此C语言进行了如下规定:
- 变量代表变量本身的值
- &变量代表变量本身的地址
memset函数的功能是初始化从某个地址开始的n个字节,因此第一个参数应该是地址,因此不应该是seraddr,而是&seraddr。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)