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;
}
以上内容仅供参考,欢迎交流!
例如
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;
}
以上内容仅供参考,欢迎交流!