回 帖 发 新 帖 刷新版面

主题:请达人指教数据结构小问题

小弟刚学数据结构(严版教材),请教达人几个问题,
关于引用参数,请指教,
1.将线性表置空函数
status ClearList(LinkList&L)
可以不使用引用参数吗,直接用L?
2.Status SetCurElem(Link&P, ElemType e)
//已知P指向线性链表中的一个结点,用e更新P所指结点中数据元素的值
为什么要用&P?
3.Status Put(Triplet &T,int i,ElemType e)
//T是一个三元组,置T的第i元的值为e
为什么要用&T,不用T?

有没有高手留个QQ给我,我以后也好请教一下,
谢谢!

回复列表 (共7个回复)

沙发

1. 你需要明白传值和传引用的区别。不过,这段代码是把指针作为值传进去,跟“引用”没有关系。
2. 这里&P表示P是一个引用。(前面,1的&L表示取得L的地址,写法相同,但位置不同,所以意义不同。注意区别)
3. &T表示T是一个引用。

提示:“引用”是C++的语法概念,不是C语言的。严老师的那个教程,在比较前面的章节里面已经说了,这本教程用的是“类似C语言的方法来描述”,注意是类似C语言,不是等同于C语言。如果直接把这些代码用C语言编译器编译的话,会出现错误的。但是基本上可以用C++的编译器正确编译并运行。

当然了,最好是稍微的了解一下C++的“引用”是怎么回事,这样一来,那本书上面的代码就会显得好懂了。

板凳

&有三个用法:
当作为函数声明和定义时候的形参的修饰符的时候,代表这个参数将会传递一个引用。传递引用的时候目标函数接受到的实参将是所传递变量的别名而非副本,如果对这个叙述不理解的话,就记住下面两点:传递引用的时候在函数里对变量的修改会被带到函数调用处;传递引用的时候一般比较节约内存开销。
当作为单目操作符出现的时候,指对右边的变量进行取地址操作,最后的结果是一个指向该变量的指针。记住*(&a)==a
当作为双目运算符出现的时候,代表位与运算。这种用法与本题无关。以上

3 楼


谢谢指点,我的问题可能没说清楚,
引用我基本了解了,
只是上面三个例子我认为不需要用引用,
可以直接用参数名就可以,
请达人再分析分析上面三个例子为什么
一定要用引用参数呢?

4 楼

lz没仔细看牛仔兄的回复哦
第一个不是引用,引用只是在函数的形参中出现,实参中出现的时候是取地址而不是引用
后面两个用引用的理由我的回复里也说的很清楚了:第一,地址传递让值在函数中的变化能影响调用处;第二,节约内存开销

5 楼


谢谢雪光兄回复两次,
第一个函数是
status ClearList(LinkList&L)
严版教材里的引用参数多数我已经理解,
有少数不理解,
上面的三个例子应该不是为了节约内存,
也不会改变原来的参数,特别是第二三个,
是严老师随意用的吗,可是其它的都不是
随意用的,雪光兄和各位达人能不能就这
三个例子分别地具体地解释一下呢?

6 楼

“应该不是为了节约内存”这样的说法是靠不住的
当我们确定一个行为可能对数据进行更改的时候,我们应该传递一个引用,这样既能保证修改被传递,同时也可以避免因为建立临时对象带来的额外开销和调试困难。
即使是不需要修改的场合,我们也会传递一个常引用来避免内存重复开销的情况

7 楼

谢谢雪光兄,
虽然我的问题还没全弄懂

我来回复

您尚未登录,请登录后再回复。点此登录或注册