C++之引用和指针

作者: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 第五版

原文地址:https://www.cnblogs.com/liutongqing/p/7050431.html