结构体里面定义一个该结构体类型变量为什么必须用指针

一.错误:

struct TreeNode
{
    int val;
    TreeNode left;
    TreeNode right;
};

二.分析原因:

如果在定义class A时,A域的类型是未定义的class A而不是指向class A对象的指针类型,编译器会尝试在编译时分配一块内存给A域,但由于class A的定义还没有出现,因此无法确定A域需要多少空间。这就导致了编译错误。

改用指针可以解决这个问题,因为指针的大小是固定的,与指向的类型无关。在定义class A时,编译器只需要知道A域是一个指针类型,就能正确地分配内存。同时,在实际使用A域时,可以通过对指针进行解引用来访问实际的class A对象。

三.解决措施:

struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
};

四.如何指针进行解引用来访问实际的class A对象

要通过指针来访问实际的class A对象,可以使用解引用运算符*。假设指针变量为ptrA,则可以通过以下方式访问实际的class A对象:

ClassA *ptrA;   // 假设指针变量为ptrA
ClassA objA;    // 假设有一个ClassA对象objA

ptrA = &objA;   // 将指针ptrA指向objA

// 通过指针ptrA访问objA的成员变量和成员函数
(*ptrA).member_variable = 10;
(*ptrA).member_func();
ptrA->member_variable = 10;
ptrA->member_func();
posted on 2023-03-30 20:15  哇酷哇酷  阅读(112)  评论(0编辑  收藏  举报