#include <iostream>
#include <string.h>
using namespace std;
class A
{
private:
int a;
int b;
public:
A():a(10),b(20){};
A(int ad,int bd):a(ad),b(bd){};
void printvalues()
{
cout<<a << " " <<b<<endl;
}
};
int main()
{
A a(5,12);
memset(&a,sizeof(A),0);
a.printvalues();
return 0;
}
将对象设置为0,似乎对对象没有任何影响。任何人都可以帮助我理解这种行为。 输出: 5 12
答案 0 :(得分:9)
你有memset
的参数是错误的。它是memset(addr, value, number)
。
<小时/> 注意:在C ++中,通常会避免使用
memset
。
答案 1 :(得分:5)
你的memset错了:
void * memset ( void * ptr, int value, size_t num );
它应该是:
memset(&a,0,sizeof(A));
在您的示例中,您将0
字节a
设置为sizeof(A)
,因此,显然没有变化。
答案 2 :(得分:2)
memset
的正确语法是memset(&a,0,sizeof(A))
,因为第一个参数是数组或变量,第二个参数是值,第三个参数是字节数。
有关memset
访问http://www.cplusplus.com/reference/clibrary/cstring/memset/的详细信息。
答案 3 :(得分:1)
您错误地将参数设置为memset。起初我觉得这太棒了!
写下:memset(&a,0,sizeof(A));
一切都会如预期的那样。