C++学习基础二——指针与引用的区别

一、指针:

(1)如果对指针进行解引用操作 赋值,改变的是指针所指向对象的值;
(2)如果不对指针进行解引用操作 赋值,则改变的是指针本身的值;
(3)const指针本身的值不能修改,但是const指针所指向对象的值能不能修改取决于其所指向对象是否为const类型。

例如:

代码片段1:

string s1("some value");
string *sp1 = &s1;//此时s1的值为“some value”,指针sp1指向s1

string s2("another");
string *sp2 = &s2;//此时s2的值为"another",指针sp2指向s2

*sp1 = "a new value";//此时s1的值为"a new value",指针sp1指向s1
sp1 = sp2;//此时指针sp1指向s2

二、引用:
(1)定义引用时必须初始化。
(2)引用一经初始化,就始终指向特定的对象,如果给引用赋值,则修改的是引用所关联对象的值。

代码片段2:

int i1 = 1000,i2 = 2000;
int *s1 = &i1, *s2 = &i2;
s1 = s2;

结果:s1所指向的i1的值不变,赋值操作结束后,只是改变了指针s1本身的值,即s1指针指向另一个不同的对象。

代码片段3:

int &s1 = i1, &s2 = i2;
s1 = s2;

结果:赋值操作修改了s1所关联对象i1的值,而不是引用本身的值。赋值结束后,引用s1和引用s2还是分别指向原来对象,只是此时两个对象的值相等。

给出比较全的代码:

#include <iostream>
using namespace std;

int main(){

	float s1 = 100,s2 = 200;
	cout<<"原始两个值: "<<s1 << " "<<s2<<endl;

	float *sp1 = &s1, *sp2 = &s2;
	cout<<"第一次操作后的两个值: "<<s1 << " "<<s2<<endl;
	cout<<"两个指针的值 sp1 = "<<*sp1<<"  sp2 = "<<*sp2<<endl;
	cout<<"-----------------------------"<<endl;

	//对指针进行解引用,改变了指针所指对象s1的值,由100变为10,对应上面指针理论(1)
	*sp1 = 10;
	cout<<"第二次操作后的两个值: "<<s1 << " "<<s2<<endl;
	cout<<"两个指针的值 sp1 = "<<*sp1<<"  sp2 = "<<*sp2<<endl;
	cout<<"-----------------------------"<<endl;

	//不改变指针所指对象s1的值,改变了指针本身的值,此时指针sp1指向sp2,对应上面指针理论(2)
	sp1 = sp2;
	cout<<"第二次操作后的两个值: "<<s1 << " "<<s2<<endl;
	cout<<"两个指针的值 sp1 = "<<*sp1<<"  sp2 = "<<*sp2<<endl;
	cout<<"-----------------------------"<<endl;

	//此时改变指针对象s2的值,同时指针sp2的值也改变
	*sp1 = 15;
	cout<<"第三次操作后的两个值: "<<s1 << " "<<s2<<endl;
	cout<<"两个指针的值 sp1 = "<<*sp1<<"  sp2 = "<<*sp2<<endl;
	cout<<"-----------------------------"<<endl;
	cout<<""<<endl;

	float &i1 = s1, &i2 = s2;
	cout<<"第四次操作后的两个值: "<<s1 << " "<<s2<<endl;
	cout<<"两个引用的值 s1 = "<<s1<<"  s2 = "<<s2<<endl;
	cout<<"-----------------------------"<<endl;

	//对引用赋值改变的是引用所关联对象的值
	i1 = 30;
	cout<<"第四次操作后的两个值: "<<s1 << " "<<s2<<endl;
	cout<<"两个引用的值 s1 = "<<s1<<"  s2 = "<<s2<<endl;
	cout<<"-----------------------------"<<endl;

	//此时只是改变了i1引用所关联对象s1的值,只是引用i1和i2还是分别指向各自的对象,只是各自对象的值相等。
	i1 = i2;
	cout<<"第五次操作后的两个值: "<<s1 << " "<<s2<<endl;
	cout<<"两个引用的值 s1 = "<<s1<<"  s2 = "<<s2<<endl;
	cout<<"-----------------------------"<<endl;

	return 0;
}

后续更新中......

时间: 2024-08-24 12:57:56

C++学习基础二——指针与引用的区别的相关文章

C++Primer 学习笔记之指针和引用

1.引用概念 引用引入了对象的一个同义词.定义引用的表示方法与定义指针相似,只是用&带起了*. 例如:Point pt1(10,10); Point &pt2 = pt1;//定义pt2为pt1的引用.通过这样的定义,pt1和pt2表示同意对象,需要特别强调的是引用并不是产生对象的副本,仅仅是对象的同义词.因此,当下面的语句执行后: pt1.ofset(2,2); pt1和pt2都具有了(12,12): 引用必须在定义的时候马上初始化,因为它必须是某个东西的同义词.你不能先定义一个引用后才

C++ 中指针与引用的区别

指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址: 引用是某块内存的别名.     ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化

指针和引用的区别(c/c++)

http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用"从一而终" ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变: 5.

【转】指针和引用的区别

c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用“从一而终” ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变: 5. 引用不能为空,指针可以为空: 6. “sizeof 引用”得到的是所指向的变量(对象)的大小

指针、引用的区别和联系

时间:2014.05.27 地点:基地 ---------------------------------------------------------------------------------------- 一.指针和引用的区别 1.指针可以为空,引用不可以不空. 引用是一个对象的别用,定义一个引用时必须初始化,而声名指针时可以不指向任何对象,故使用指针时也常要做空的判断,而引用无需,因为引用总是绑定着一个对象. 2.指针可以改变指向,而引用不可以重新绑定新对象.(指针变异思迁,引用从

More Effective C++----(1)指针与引用的区别 &amp; (2)尽量使用C++风格的类型转换 &amp; (3)不要对数组使用多态

Item M1:指针与引用的区别 指针与引用看上去完全不同(指针用操作符"*"和"->",引用使用操作符". "),但是它们似乎有相同的功能.指针与引用都是让你间接引用其他对象.你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能使用指向空值的引用.一个引用必须总是指向某些对象.因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空

C++中指针和引用的区别(转载)

C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址: 引用是某块内存的别名.     ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3

传指针和传指针引用的区别/指针和引用的区别(本质)

转自:http://blog.sina.com.cn/s/blog_673ef8130100imsp.html 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值.(这里是在说实参指针本身的地址值不会变) 而在引用传递过程中,被调函数的形式参数虽然也作为局

指针与引用的区别以及引用的三种用法

1.指针与引用的区别: 指针是一块内存的地址值,而引用是一块内存的别名. 下面引自:http://www.cnblogs.com/kingln/articles/1129114.html 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一