#include <iostream>
using namespace std;
struct test1 {
void * a1;
};
struct test2
{
int a2 = 10;
int a3 = 20;
};
int main() {
//结构体和结构体成员变量中的指针需要分别初始化
test1 h1; //初始化结构体test1
h1.a1 = new test2; //初始化空指针a1分配内存的大小为结构体test2所占字节
//此时h1.a1是一个内存空间大小与结构体test2的内存大小一样的空指针。
//空指针h1.a1虽然其内存大小和结构体test2一样,但是没有办法调用test2中的成员变量
//只能将空指针h1.a1强制转换成结构体test2类型的指针并初始化新的结构体test2类型的指针h2
test2 *h2 = (test2 *) h1.a1; //将空指针h1.a1强转为test2类型的指针
//因为h2指针和h1.a1的指针的地址一样,所以可以通过修改h2的成员变量达到修改h1.a1的目的。
cout << "修改之前" << endl;
cout << "h22" << h2->a2 << endl;
cout << "h23" << h2->a3 << endl;
h2->a2 = 30; //此时修改h2中成员变量的值就是在修改test2类型的指针h1.a1的值
h2->a3 = 40;
//因为没有办法直接使用 h1.a1->a2的方式访问成员变量,
//所以仍然需要初始化h3,并强制转换h1.a1为结构test2类型的指针才可以访问成员变量。
test2 *h3 = (test2 *) h1.a1;
cout << "修改之后" << endl;
cout << "h32" << h3->a2 << endl;
cout << "h33" << h3->a3 << endl;
return 0;
}
结构体嵌套空指针,空指针强制转其它类型并访问成员变量
最新推荐文章于 2024-07-21 20:35:07 发布