【数据结构】【序列表】SqList *L和SqList *L区别明显,对于序列表抽象数据模型中的函数,其参数使用各不相同。
SqList *L的情况,意味着l是对List的参照,由于函数内部对l的操作相当于对Head的操作,因此在该情况下对l的变更发生在List中。
对于SqList *L,这意味着当List指针作为函数参数传递时,将指针List指向的地址值指派给指针l。 虽然可以与() int型类比,但指针本质上也是数据类型。 也就是说,此时的实参List和形参l不是同一指针,而是指向同一地址的不同指针。 所以你对l的操作没有发生在List身上。 得不到预期的效果。
例如,(顺序表初始化函数) )此函数的代码实现如下:
voidinilist(sqlist*L ) l=(sqlist * ) malloc ) sizeof ) sqlist ); L-length=0; 在main函数中调用时,`
SqList *List=NULL; initlist(list; 此时执行后,希望名为List的指针指向序列表空间。 事实上,如果选择后一个函数参数的方法(SqList *L ),则List=NUll,您会看到无法获得所需的结果。
怎么选? 综上所述,可以看出,如果是修改顺序表的函数(例如初始化元素、插入元素、删除元素),最好选择方式传递参数~