指针(Pointer)是指向某种类型对象的复合数据类型
(指针可以分为const指针和非const指针,以及指向const对象的指针和指向非const对象的指针,还蛮复杂的细细品味综合比较)
指针可以用于指向对象
如:
内置类型
int i=0;
int *p=i;
标准库类型
string s("hello world");
string *sp=&s;
复合类型
int ia[]={0,2,4,6,8};
int *ip=ia;
指针还能配合new创建动态对象
如:
int *pia=new int[10];
指针可用作函数形参,改变指针指向的对象
如:
void reset(int *ip)
{
*ip=0;
ip=0;
}
指针还可以用作函数返回类型,千万别返回局部对象的指针。
---------------------------------------------------------------------------------------------------
引用(reference)就是对象的另外一个名字,作用在引用上的所有操作实际上都是作用在该引用绑定的对象上
(引用有const引用和非const引用之分)
定义引用绑定某个对象
如:
int ival=1024;
int &refVal=ival;
refVal+=2;
引用可用作函数形参(这是他的主要功能)
如:
void swap(int &v1,int &v2)
{
int tmp=v2;
v2=v1;
v1=tmp;
}
引用也可以用作函数返回类型,千万别返回局部对象的引用
如:
char &get_val(string &str,string::size_type ix)
{
return str[ix];
}
---------------------------------------------------------------------------------------------------
引用和指针比较
虽然使用引用和指针都可以间接访问另一个值,但他们之间有两个重要区别:
1,引用总是指向某个对象,定义引用时没有初始化是错误的
2,给引用赋值修改的是该引用所关联的对象的值,而不是是引用与另一个对象关联。引用一经初始化,就始终指向同一特定对象。
一般C++提倡尽量少用指针和数组,容易引发不可预料的错误。
以上总结自《C++ Primer》第四版,不足的地方希望LZ补充,呵呵
温馨提示:答案为网友推荐,仅供参考