作者:tongqingliu
转载请注明出处:http://www.cnblogs.com/liutongqing/p/7050431.html
C++之引用和指针
C++引用
引用的基本用法:
int a = 12;
int &b = a; // b指向a,b是a的引用,b是a的别名
下面看一个实例:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int val = 123;
int &refval = val; //refval是val的别名
cout << "val=" << val << endl;
cout << "refval=" << refval << endl;
refval = 0;
cout << "val=" << val << endl;
cout << "refval=" << refval << endl;
system("pause");
}
程序输出:
val=123
refval=123
val=0
refval=0
请按任意键继续. . .
引用其实就是给对象起一个别名,比如张明的别名是小明,那么你打张明和打小明都是一个意思,打的都是同一个人。
但是有几点需要注意:
- 引用必须初始化,
int &val;
错。 - 引用类型的初始值必须是一个对象,而不能是个数
int &val = 1;
错。 - 引用和引用的对象必须同一类型,
double a = 1.2; int &val = a;
错。 - 引用不是对象,不能定义引用的引用,
int a = 1; int b = 2; int &c = a; int &c = b;
错。
指针
和引用一样,指针可以间接访问其他对象。
指针的特点:
- 指针本身就是一个对象,可以赋值也可以拷贝,也可以先后指向不同的对象。
- 指针在定义时可以不赋值。
指针的基本用法;
int *ip1, *ip2;//声明指针,ip1和ip2都是指向int型对象的指针
double dp, *dp2;//dp是double型对象,dp2是指向double型对象的指针
int ival = 32;
int *p = &ival;//p是指向变量ival的指针,p存放变量ival的地址
上面最后一行,p存放变量ival的地址,*p表示ival的值(*
是解引用符),&ival表示取ival的地址。
#include<iostream>
using namespace std;
int main()
{
int val = 123;
int *pval = &val;
cout << "val=" << val << endl;
cout << "pval=" << pval << endl;
cout << "&val=" << &val << endl;
cout << "*pval=" << *pval << endl;
system("pause");
}
程序运行结果:
val=123
pval=00A2FBE0
&val=00A2FBE0
*pval=123
请按任意键继续. . .
- 引用不是对象,没有实际地址,不能定义指向引用的指针。
- 指针类型必须和所指向对象的类型一样。
参考:
C++ primer 第五版