C++中的指针和引用各有什么特点?

来源:百度知道 编辑:UC知道 时间:2024/05/27 06:09:58

引用就是一个变量的别名,改变引用的值就是改变变量的值,而指针也可以指向变量,从而改变变量,但是指针使用时更容易出错,所以不如引用。

指针和引用都是直接作用于地址的类型,区别主要是指针更加灵活,很多时候引用是做不到的。
1、强制类型转换。 比如老式风格的程序传递全局临时变量常常使用void *承载一切类型。
struct tag_globalItem{
void * m_item;
} titem;
titem.m_item = (void *) ptr;
ptr可以是任何类型的指针
2、允许有“空”状态。指针作为可以有空状态,而引用必须在定义时就初始化。
int & tt; //错误,error C2530: 'tt' : references must be initialized
int * tt; //通过编译,tt初始化为一个随机的地址(危险哦!)
3、常量引用用于传递不能被修改的大对象,防止参数传递时的拷贝开销,写程序时比常量指针直观。
void printTree(const MyTree & cTreeItem)
{
...
}
更重要的是,采用这种方法,如果MyTree 支持从const char *类型构造,也可以使用
printTree("A1:B1+C:C1+C2|23");
来调用,编译器会自动产生一个MyTree 类型临时参数并用const char *类型进行构造。

因此,建议
1、在明确需要修改函数参数的值的情况下一定使用指针,因为在调用的时候强制自己加上"&"以提醒自己和阅读你的代码的人这个变量的值可能在函数中被更改。
2、在传递大对象(字符串、复杂对象)的时候,使用常引用,可以避免内存拷贝