C++ 引用 和 指针 心得

感谢万能的师兄= =!

上班时有如下结构:

 1 struct ImportFormat
 2 {  
 3     LPCSTR    fileFormat;
 4     LPCSTR videoFormat;
 5     LPCSTR audioFormat;
 6     BOOL isPlus;
 7     int priority;
 8   vector<ConnectionInfo2> &connections;
 9 //const std::vector<ConnectionInfo2> connections;
10     
11 };

在main()调用时

ImportFormat  imf;

报错,要求必须初始化。因为struct和class几乎完全一样,于是在struct中添加 publie: ImporFormat()构造函数,里边初始化。

在初始化的过程中,发现还在报错,具体过程真不想说,都是泪。

  询问师兄,师兄说,肯定要报错,就在引用那里,去掉后OK了。


 

趁着机会,就把之前不懂的引用和指针概念问题都抛了出来:


 

1.引用,相当于别名,指向的是已经存在的同一个东西。

   那在struct中为什么报错?

   说出原因来羞愧死我= =!就好像先有的人才有的名字和别名。不能在创造一个对象前就声明了一个别名,谁的别名啊?

    引用,必须对是已经存在的对象而言


2.指针,其实就是地址   

   

1 int a ;
2 int *pa=&a; //&取地址操作
3 *pa=a;  //*取值操作
4 int &b=a;//b是a的别名,引用

3.函数传参  

  函数定义时

  (1) int function(int & a),

            传参为a的地址。在函数定义域内,a不是地址,不是指向a的指针,a就是他本身。

            函数结束,a改变。

 (2) int function(a)

           传参为a的副本。  在函数定义域内,a 是副本

           函数结束,a没变       

  (3)int function(int *pa)

           传参为指向a的指针

           函数结束,a改变。

    综合:回想 SWAP(a,b)没成功,SWAP(*,*)成功


 

4.函数传参

   函数调用时

   在main()中

    int b;

   对于上式(1),调用为 function(b)//写本身即可

   对于上式(3),调用为function(&b)//指针

      


 

暂时写这里,下班

 

注意!在类和struct中,没事就不要用引用了。。。          

 

   

 

posted on 2013-12-13 18:13  卡西大人  阅读(252)  评论(0编辑  收藏  举报