偶然看数据结构方面的书,代码中出现了引用型参数,我对这个参数不是很理解,现在我也觉得他不属于C中的元素,因为K&R中没有提到过他,所以他一定是C++中的出现的,果然在C++ primer中文版(pp201)提到了他,突然觉得这本数据结构的书还真不怎么样,作者明明用的是C和C++的混合编程,居然还写着C语言版,O,GOD!

 自已写了段测试代码并用VISIO画了图,好好理解一下吧! 

 
  
  1. #include<stdio.h>  
  2.  
  3. void test1(int &L);  
  4. void test2(int *T);  
  5.  
  6. void main()  
  7. {  
  8.     int L = 12;  
  9.     int T = 13;  
  10.  
  11.     printf("test1.L = %d\n", L);  
  12.     test1(L);  
  13.     printf("test1.L = %d\n", L);  
  14.  
  15.     printf("test2.T = %d\n", T);  
  16.     test2(&T);  
  17.     printf("test2.T = %d\n", T);  
  18. }  
  19.  
  20. void test1(int &Lr)  
  21. {  
  22.     Lr = 14;  
  23. }  
  24.  
  25. void test2(int *Tp)  
  26. {  
  27.     *Tp = 15;  

 

为什么说引用类型藏有杀机呢?如作者所说,这样的安排的确直接而自然,但我不太认为安全,也许安全本身就是相对的!

使用引用类型做参数不安全的地方就是如果你看函数原型,OK!你是安全的!但如果只看调用函数的那行,那么可能误认为是通过修改副本而实现的!

而指针类型不然,无论在调用处还是在定义处都很明白的指出这是通过修改原值而实现的!

也许正如C++ primer作者所说这是C和C++程序员习惯的问题,但有一点是对的,就是C中没有引用类型!That's all!