memset()函数用法

memset()用于对整型数组或者结构体进行清0或者字符型数组赋初值或某个特定值。而不可以给整型或者double类型数组赋值:
例如
1.对整型数组全体赋某一个值。结果:错误。
  如果是对整型数组清0即memset(a,0,5*sizeof(int));改成那么是正确的。
int main(int argc, char **argv)

int a[5] ={1,2,3,4,5};
memset(a,1,5*sizeof(int));
for (int i  = 0; i < 5; ++i)
{
cout << a[i] << endl;
}


system("pause");
return 0;
}
这样输出的为16843009 是错误的。
如果代码改成:
2.对字符型数组清0。结果:正确。
int main(int argc, char **argv)

char a[5] ={'d','d','d','d','d'};
memset(a,'s',5*sizeof(char));
for (int i  = 0; i < 5; ++i)
{
cout << a[i] << endl;
}


system("pause");
return 0;
}
输出结果都为s。是正确结果。
之所以第一种会错是因为memset是以字节为单位进行填充的1的二进制位0001,int型的二进制为:
0000 0000 0000 0000 这样每一次填充后int的值就变为:0001 0001 0001 0001 换成16进制为16843009;
所以这里一定要注意memset()常用于字符型数组或结构体。
3.对结构体清0。结果:正确。
struct Samstruct
{
public:
double c;
int a;
int b;
char tmp[2];
};
int main(int argc, char **argv)

Samstruct  stTest;
memset(&stTest,0,sizeof( Samstruct ));//这里stTest要用&符号,因为它是结构体变量(可以看成结构体的对象)
cout << stTest.c << endl;
cout << stTest.a << endl;
cout << stTest.b << endl;
for (int i = 0 ; i < 2 ; ++i )
{
cout << stTest.tmp[i] << endl;
}


system("pause");
return 0;
}
4.对结构体数组清0。结果:正确。
struct Samstruct
{
public:
double c;
int a;
int b;
char tmp[2];
};
int main(int argc, char **argv)

Samstruct  stTest[5];
memset(stTest,0,sizeof( Samstruct )*5); // 因为是数组所以stTest不需要&,
                                       //而且第三个参数为sizeof( Samstruct )*5;
for (int i = 0 ; i < 5 ; ++i )
{
cout << stTest[i].c << endl;
cout << stTest[i].a << endl;
cout << stTest[i].b << endl;
for (int j = 0 ; j < 2 ; ++j )
{
cout << stTest[i].tmp[j] << endl;
}
}


system("pause");
return 0;
}
以上内容仅供参考,欢迎交流!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值