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中,没事就不要用引用了。。。