温习C/C++笔记(2)——指针和引用的区别
2012-07-29 14:03
253 查看
首先看一段代码以及运行结果,我将结合该段代码讲解指针和引用的两点区别:
其运行结果如下:
本段程序很简单,不过当你读了代码和输出结果之后可能觉得第三组结果有点怪异,
相信很多人会觉得第三组第二行的输出结果应该是"I am a simple string object",而不是
“I am a simple string object too”。
但是,结果为什么不是我们想象的那样啊?哪里出了问题?(当然了,如果你已经知道原因,就没有必要阅读下面的文字了
)
问题的原因就在于C++ 中指针和引用的微妙差别,而这的差别主要有两点:
1.引用总是指向某一个对象,定义引用时不进行初始化是错误的。而且其关联对象是不可以改变的,始终与定义初始化的时候一致。
2.赋值行为的差异,给引用赋值的结果是修改该引用所关联的对象的值,而不是将引用与另外一个对象关联。
这里,第二条有点让人迷惑,搞不清楚最后到底是修改了什么。好的,现在结合上面的代码来解释:
cout << str1 << endl;的输出结果变成了str2的内容,而不再是str1本来的内容,这是因为对于引用的赋值
操作修改了str1对象的值,而不是让sRef和str2关联。
最终的结果就是sRef仍然是和str1关联,同时str1的内容被修改为str2。
这就是上面第二天的区别,或许现在你已经有点头绪了,也希望这篇短文章能给你
带来一些帮助。
今天就先写到这里了,如果大家觉得本文有什么不妥之处,欢迎批评指正,望与大家一起进步!
// // main.cpp // testC++02 // // Created by fei dou on 12-7-29. // Copyright (c) 2012年 vrlab. All rights reserved. // #include <iostream> #include <string> using namespace std; int main (int argc, const char * argv[]) { string str1 = "I am a simple string object"; string str2 = "I am a simple string object too"; string *sPtr = &str1; string &sRef = str1; cout << "原始内容:" << endl; cout << *sPtr << endl; cout << str1 << endl; //进行指针赋值之后的结果 cout << "进行指针赋值之后的结果:" << endl; sPtr = &str2; cout << *sPtr << endl; cout << str1 << endl; //进行引用赋值之后的结果 cout << "进行引用赋值之后的结果:" << endl; sRef = str2; cout << sRef << endl; cout << str1 << endl; return 0; }
其运行结果如下:
本段程序很简单,不过当你读了代码和输出结果之后可能觉得第三组结果有点怪异,
相信很多人会觉得第三组第二行的输出结果应该是"I am a simple string object",而不是
“I am a simple string object too”。
但是,结果为什么不是我们想象的那样啊?哪里出了问题?(当然了,如果你已经知道原因,就没有必要阅读下面的文字了
)
问题的原因就在于C++ 中指针和引用的微妙差别,而这的差别主要有两点:
1.引用总是指向某一个对象,定义引用时不进行初始化是错误的。而且其关联对象是不可以改变的,始终与定义初始化的时候一致。
2.赋值行为的差异,给引用赋值的结果是修改该引用所关联的对象的值,而不是将引用与另外一个对象关联。
这里,第二条有点让人迷惑,搞不清楚最后到底是修改了什么。好的,现在结合上面的代码来解释:
sRef = str2; cout << sRef << endl; cout << str1 << endl;这里,首先sRef = str2;语句是一个对引用的赋值,sRef是字符串str1的引用。执行赋值操作以后我们发现
cout << str1 << endl;的输出结果变成了str2的内容,而不再是str1本来的内容,这是因为对于引用的赋值
操作修改了str1对象的值,而不是让sRef和str2关联。
最终的结果就是sRef仍然是和str1关联,同时str1的内容被修改为str2。
这就是上面第二天的区别,或许现在你已经有点头绪了,也希望这篇短文章能给你
带来一些帮助。
今天就先写到这里了,如果大家觉得本文有什么不妥之处,欢迎批评指正,望与大家一起进步!
相关文章推荐
- 温习C/C++笔记(2)——指针和引用的区别
- C++引用和指针的区别 —— 笔记
- 【从C到C++学习笔记】引用/const引用/引用传递/引用作为函数返回值/引用和指针的区别
- C++学习笔记 c++引用(&)与指针(*)的区别
- c++温习日记 12-8 -引用与指针的区别
- C++学习笔记 指针与引用的区别
- C++ Data Structure 学习笔记 (2011.5.3)——传值,指针,引用的区别及Vector与String的详细用法
- C++学习笔记(1)之传值、传指针、传引用的区别
- C语言学习笔记 (002) - C++中引用和指针的区别(转载)
- More Effectvie C++笔记(一)--指针与引用区别,C++风格的类型转换
- c++指针和引用区别
- C++中引用传递与指针传递区别
- Java引用和C++指针的区别
- 引用与指针的区别,摘自More Effective C++
- c++ 指针与引用的区别
- C++指针和引用的区别
- C++中指针和引用的区别
- C++小知识:引用和指针的区别是什么?
- C++中指针和引用的区别-转载fu_jiangtao<chinaunix>
- C++中的引用与指针的区别