这个问题很简单。其原因来自于调用函数和传递参数的方式。众所周知,参数通过栈传递其拷贝。函数中对“副本”的任何修改不会影响到“原件”。
因此,如果我们希望函数为我们修改一个数据(或者说成我们提供一个接收数据的位置,由函数为我们填充数据),则我们需要传递该数据的地址(指针)。这样函数中就可以dereference然后改动被指向的数据。
而如果我们只是希望告诉函数一个数据的信息,则传递一个它的副本足以(换句话说,这种信息的逻辑意义对于函数来说是只读的)。
例如:
void push(Type T, TNODE **top);
则说明push函数希望修改*top的值。