C++中的指针与引用的区别与联系
引用与指针实质上都是间接地指代另一个变量,引用相当于该变量的外号或者小名,而指针实质上是指向该变量的地址进而操作该变量
区别1:指针的地址与该变量不同,但引用的地址与该变量相同相同
1 #include<iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int i = 5; 8 int& j = i; 9 int *p = &i; 10 11 cout << &i << endl << &j << endl << &p << endl; 12 13 return 0; 14 }
结果如下
区别2:引用变量不能为空,声明引用变量时一定要初始化,初始化后就一直是该变量的小名,不会被改变,而指针可以为空,指针指向的值也可以改变
观看下面程序
1 #include<iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int i = 5; 8 int& ri = i; 9 10 int j = 10; 11 12 ri = j;//将变量j赋给ri,即赋给i 13 14 j++; 15 16 cout << i << " " << ri 17 << " " << j << endl; 18 19 return 0; 20 }
结果
解释:引用一旦初始化后就只会是初始化变量的小名,不会被改变,既ri一直是i的小名,不会因为j赋值而变成j的小名
区别3:引用的效率比较高,因为引用不会为空,不用进行检查是否为空,而指针需要检查
1 void func(int& x) 2 { 3 cout << x << endl; 4 } 5 6 void func(int *p) 7 { 8 if (p) 9 cout << *p << endl; 10 }
总结:该变量不会再指代其他东西时,可以使用引用,比如说函数形参