来说一说typedef 和&
作为懒人,typedef这个东西一定要会用,具体来说怎么偷懒呢?
第一个缩短代码长度,看个例子:
很长,这样写肯定不是一个懒人喜欢做的,如果使用了typedef 就可以变成这个样子:
确(三声)实很明显,那就直接说说这神器是干啥的以及怎么用
通俗来说,这东西就是给一种变量类型重新起一个名字
int a;这是定义了一个整形变量,对吧?我们先不考虑某些服务员可能会送错之类的问题
typedef int a;这样写,我们就是给小int 同学重新起了一个名字,这个名字就是a
以后我们在用int的时候,就可以直接用a
假设我要定义个整形变量,变量名是b
我可以写int b;同时我也可以写a b;
下面来说一说怎么用(敲黑板,划重点),想给什么类型起新名字,我就定义个该类型的变量
还是上面的例子,我想给int 取个新名字叫a,我首先int a;
然后在前面加上typedef ,就大功告成
稍微特殊一点的是指针类型,但是也不难,比如所我给int *起名字叫ab
那么就是typedef int * ab;这时候int*p;等效于ab p;
typedef 变量类型原来的名字 变量类型的新名字;
在这里,list 等效于struct node * lnode 等效于struct node
也就有了我们开头举得那个例子
第二种就是减少代码的替换量,比如说一开始要对int变量类型的单链表,结果所有函数都写完了,但是发现由于自己眼瞎,题目中说的其实是char变量类型的,憨熊就要重新写了或者手动一个一个把int换成char,聪明一点的ctrl f全局替换,但是我们如果一开始给链表变量类型起一个新名字,那么问题就迎刃而解了,就像上面的dtype data;
提前写typedef int dtype;要改成char类型的链表,那么我们只需要把这里的int换成char即可
下面来说&,与运算是它,取地址也是它,它还有一种用处叫引用
引用这东西也可以说是起新名字,不过是给变量取新名字
我们都知道,一个人今天叫张三,明天改了一个名字叫李四,但是人还是同一个人
同理,我们只是给变量取了一个新名字,但是内存空间是同一块
举个例子,int a = 5; int &b = a;
请你大声告诉我,b等于几,当然我们还是不考虑服务员会送错的问题
b肯定是5,在这里b就是a,a就是b
变量类型 &变量的新名字 = 变量原来的名字;
那么问题来了,这玩意有什么用,我们还是举栗子,给你两个int类型的变量,让你写一个函数去交换他们的值,怎么写?
蠢蛋这样写:
如果刚好你也这样想,那么恭喜你喜提一个新名字“蠢蛋”
这时候某些同学说了用指针,没错指针可以解决,但是我们上面说的& 同样也是可以实现的
由于这里是自定义函数,形参名其实可以和实参名一样,于是
那么这东西有啥用呢,我们最近其实已经用到了,细心同学发现链表的很多函数当中有的加了&,有的则没有加,现在想一想,应该就能想通了,具体要看我们需不需要对实参进行实质性的修改,像是插入,删除节点,或者修改某个节点的值,以及3.31作业题第一题反转链表那么我们就是需要加&的,但是也有像对于链表进行打印,或者在链表中查找是不是具有某种属性的节点,我们就是不需要加&的。