1.void union (List &La,List Lb) //链表的合并
用& 符号意味着La 是所谓的引用性变量,
只有这样才能让La 的变化能返回主程序。
一个更典型的例子是两个变量的值交换.
void swap(int &x , i nt (y){ int z=x; x=y;
y=z;return;}, 可以试试, 如果去掉&符号会发生什么,) //合并链表La,Lb
2.*PA=a; 表示把a的值赋值给PA所指的内存地址,PA本身没变。
PB=&a; 表示指针PB指向变量a的地址,PB本身变了。*PA=a; 表示把a的值赋值给PA所指的内存地址,PA本身没变。
*p是一个值,p是一个地址 *是取值的意思,&是取地址符号。
linklist p=Lnode * p;p是一个指针,两者作用都是定义了一个指向结构体的指针
3. delete p;
就会在堆上分配一块内存,当作int类型使用,并赋值为1,将其地址储存在栈上的int*类型的p里。delete p会释放p所指向的内存。而这里p为一自动变量,其本身在程序退出其作用域时销毁。
用delete命令处理某个指针,说是把那个指针删除了是不正确的。
delete命令指示释放了那个指针原本所指的那部分内存而已。被delete后的指针p的值(地址值)并非就是NULL,而是随机值。
也就是被delete后,如果不再加上一句p=NULL,p就成了“野指针”,在内存里乱指一通。
如果在定义p的那个函数在delete了p后,没再调用p,就没什么问题,在这个函数结束后,p就会跟其它变量一样被消除。但若在那个函数里delete了p后,又没再给p赋值(地址值),再次调用p就危险了,因为这时p在内存里乱指,有可能指到一些重要地址,随时可能系统崩溃。
//p=NULL是个好习惯
//就像你蹲完厕所要洗手一样
4.引用型参数
1.需要改变实参的值,比如swap()。参数是引用时,函数接收的是实参的左值而不是值的拷贝。这意味着函数知道实参在内存中的位置,因而能够改变它的值或取它的地址。
2.向主调函数返回额外的结果。
3.向函数传递大型的类对象