C的结构体中为什么用*p
struct Person {
char mName[64];
int mAge;
};
void PersonEat(struct Person* p) {
printf("%s要吃饭\n",p->mName);
}
void test01() {
struct Person p1;
strcpy(p1.mName, "浩哥");
PersonEat(&p1);
}
test的时候,实现功能为什么要&取地址
C语言中封装是分开的
1.结构体实现对象种类属性
2.书写方法功能 //用到指针,所以传入也会用到 p->nName
3.进行测试实现 //因为上面用到了指针,这里实现的时候也就取地址实例化的个体就行 \
p1.personEat() p1 是具体的谁,personEat() 是方法
浅拷贝和深拷贝的区别
原因是:浅拷贝会释放掉两次堆区空间,但只有一个堆区空间可释放,所以导致挂掉
解决方案:加一个深拷贝代码
//构造函数 系统会提供默认构造函数,而且是简单的值拷贝
//自己提供深拷贝,原因是简单的浅拷贝会释放堆区空间两次,导致挂掉
//深拷贝
Person(const Person& p) {
m_Age = p.m_Age;
m_Name = (char*)malloc(strlen(p.m_Name) + 1); //+1是因为有一个\0字符串结束符
strcpy(m_Name, p.m_Name);
}