1.关于如何取结构体里的成员:
如图,定义了一个结构体,然后我们再定义一个结构体变量,如 Stack stack;
显然我们定义的变量不是一个指针,它只是一个普通的拥有两个成员的结构体,此时,如果我们需要取出这个结构体里
的 top 这个成员,就只有一种可行的方法,就是 stack . top;
这时我们再定义一个变量,如 Stack* s;显然这个 s 是一个指针 ,它指向图中的这种结构体,这种情况下我们要想取出
里面的 top 成员就有两种方法,一种是我们常用的 s->top; 还有一种就是 (*s ) . top;
由此可以得出当我们定义的变量不是一个指针类型时,是不存在 -> 这种取成员的方式的。
2.关于老师给我们的栈的顺序结构的代码中的误区:
如上图, top 是用来记录栈顶的位置的,所以有些人就会误认为 top 是一个指向栈顶的指针,但实际上 top 是一个
int类型的数据,并不是指针,但是它可以用来记录栈顶的位置,如图
3.关于树的代码中的update函数为什么不传tree的地址,而clear函数要传tree的地址
如图很明显update函数只将tree传给了形参t,而clear函数却将tree的地址传给了t,明明两个函数都需要更改结构体里的数据,
而update函数却不传地址呢?
其实这两个函数是有本质的区别的,update需要更新结构体里的数据,所以需要传入的是结构体的地址,只有这样才能更改
里面的数据,但tree本就是struct treenode*类型的,它就是一个指针,存放着结构体的地址,所以当我们需要把结构体的
地址传给update函数时,完全就可以把tree传给形参t,这样就已经实现了我们的目的,就可以更改结构体里的数据了。
而clear函数不同于update函数,clear函数需要改变的不是结构体里的数据,而是需要让tree的子树为空,就是要让tree的
指向变为空,即让tree指向NULL,所以需要把tree的地址传给形参t,让t变为二级指针,在通过free(*t);*t = NULL的操作来实
现让tree自身指向NULL,用图来表示如下