在重新回顾C语言数据结构时,在实现顺序表和链表时关于指针使用的区别让我觉得很有趣。
像在顺序表中实现
struct SeqList
{
DataType arry[MAX_SIZE];
int Size;
};
而我们在使用顺序表时,往往在main函数中直接定义:
SeqList seqlist;
在后面对顺序表的使用中,直接传参,比如
InitList(&seqlist);
而在链表中
typedef struct SQList
{
DataType data;
struct SQList *next;
}SQList,*PSqList;
在后面的使用中,我们往往在main函数中定义PSqList *pnode。
在后面的函数传参中,依然
InitPSlist(&pnode);
如果此时我们定义Init函数的时候,参数为一级指针,则在参数传递过程中,当程序运行到InitPSlist时,会在堆栈中生成一个临时变量,在该函数中改变的是那个临时变量的值,而当我们程序跳出该函数时,我们给他传进去的实参值并没有发生改变,所以在形参设置时,设置为二级指针,让他们实参形参指向一个地方,防止程序出错。