为啥类的对象不可以用memset初始化,而结构体可以?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥类的对象不可以用memset初始化,而结构体可以?相关的知识,希望对你有一定的参考价值。

如题。
请分别举例子说明,可以加分呵

因为类的实例中还隐含了一个成员函数指针 参考技术A 这个问题挺复杂,5分可能不够啊 参考技术B #include <stdio.h>
#include <string.h>
#include <stdlib.h>

class A

public:
int num;
;

int main()

A a[2];
a[0].num = 1;
printf("%d\n", a[0].num);
memset(a, 0, sizeof a);
printf("%d\n", a[0].num);
system("pause");
return 0;


void *memset(void *s, char ch, unsigned n);
第一个参数是void *。如果你只对一个对象memset那是不行的,比如
memset(a[0], 0, sizeof (a[0]));
除非这样写
memset(&a[0], 0, sizeof (a[0]));
参考技术C 楼上说的
memset使成员函数指针置空
参考技术D 我想除了含vptr的以外都可以用memset初始

为啥memset不能将数组元素初始化为1?(急)

在C++中 memset() 可以将数组每个元素初始化为-1 0 false true 这个我们经常用,是可以的,但是昨天将数组元素初始化为1 就出错了。全部变成了168009!不知道是怎么一回事?大虾们能否给指点迷津?

很简单memset是一个字节一个字节的设置,把一个int的每个字节都设置为1,也就是0x01010101,十进制就是16843009 参考技术A 很简单memset是一个字节一个字节的设置,把一个int的每个字节都设置为1,也就是0x01010101,十进制就是16843009

以上是关于为啥类的对象不可以用memset初始化,而结构体可以?的主要内容,如果未能解决你的问题,请参考以下文章

C结构体成员初始化memset

为啥memset不能将数组元素初始化为1?(急)

为啥java的子类中必须调用父类的构造方法

为啥memset不能将数组元素初始化为1

可以在不调用 memset 的情况下从构造函数初始化器列表中将成员结构设为零吗?

c#里为啥有的使用时函数需要new一个对象而有的不用?为啥不直接调用就好?