自学c++的 我也不知道第几天
空指针调用类中函数,访问其中静态变量
class Person {
public:
void PrintPe() {
cout << "这是啥?" << endl;
}
void printma() {
cout << m_a << endl;
}
void changeMa(int c) {
m_a = c;
}
static int m_a;
int *m_b = new int(10);
};
int Person::m_a = 2;
void test() {
Person a;
Person *p=&a;
a.changeMa(2);
p->printma();
//空指针
//为什么空指针能调用?
//因为类中函数,静态变量 都是使用的同一份
//当类定义好 其实就已经分配好了空间 在类中存的只是一个固定地址
//当需要调用时会通过这个地址去调用,所以空指针或者野指针能调用
//当为空指针或者是个野指针时候并不会影响其里面已经定义好的东西
//所以能通过空指针,野指针去调用
//为什么new出来的变量 空指针野指针不能访问?
//因为每次创建都是重新new申请堆空间的然后<->赋值的过程
//也就是其实每次创建都有不同的地址 所以其是未知的,故访问不了
//总结:定义时不确定的,未知的空指针野指针是访问不了的,只有确定的才能访问
//下面是是实际发生
//当空指针时
Person* p1 = NULL;
p1->PrintPe();
cout <<p1->m_a<<endl;
//cout << p1->m_b << endl;
//当野指针时
Person* p2 = (Person*)0x12;
p2->PrintPe();
cout << p2->m_a << endl;
//cout << p2->m_b << endl;
}
int main() {
test();
system("pause");
}