码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-07-17 11:49:06      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

一、指针:

(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;
}

 后续更新中......

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

标签:

原文地址:http://www.cnblogs.com/calence/p/5677513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!