为什么创建顺序表需要引用指针本身

我觉得直接传入L就行了,而书上说要回传对应的实参。
因为虽然实参
L与形参L不是一个指针变量,但它们指向的地址是相同的。比如说,实参与形参都指向地址1111,如果形参把1111的内容改变了,那么实参对应的1111的值也会变成被形参改变过的1111的值才对。
以上是我的思路,如果哪里出问题了请告诉我,并请告诉我书上为什么要定义形参为
&L。

  1. img

你说的都对
问题是这个函数没有返回值
那创建了一个node之后,你怎么把创建好的node地址返回给函数外面呢
如果用了&,那么你随便传入一个指针,函数里修改这个指针,你外面可以直接用了
而如果不这样,虽然最终的地址确实被改了,问题是指针不见了呀,你怎么访问这个地址呢

这里二维指针或者指针的引用才能真正实现将初始化以后的sqlist*从函数中传递出来。

就比如你写一个

void fun(int a){ a = 2;}

此时在main中调用

int b = 0;
fun(b);

此时b还是=0;
然而当你写成如下

void fun(int* a){ *a = 2;}
int b = 0;
fun(&b);

或者

void fun(int& a){ a = 2;}
int b = 0;
fun(b);

此时b=2;
对于指针来说也是一样,需要将指针从函数中改变并传递出来,就需要用二维指针或者指针的引用来作为函数参数。

当然,在c++常常使用引用,但引用底层还是指针实现,但使用引用出现问题的概率比指针小,效率和指针也差不多,引用作为函数参数可以理解为形参就是实参。

传入函数的指针,只有修改它指向的内容才可以影响到函数外部,而修改他的指向,则不能影响函数内部
例如一个指针int *p,它的地址值是0x1,传入函数,比如0x1这个地址单元原内容是100;然后进入到函数中,函数的参数是复制关系,程序复制了一个指针,指向的地址是0x1,在函数内部把0x1的地址内容改为200,那么函数退出后p所指向的地址单元内容就是200,
但是,如果在函数里,把那个参数的地址(注意时地址,而不是地址指向的内存) ,改成了0x2.函数退出后,p的地址还是0x1