首页 > 编程语言 > 详细

C++指针和引用

时间:2014-02-19 16:56:19      阅读:399      评论:0      收藏:0      [点我收藏+]

 指针

   指针是用来操纵地址的特殊类型变量,它可以作为函数参数来传递数组变量,也可以用来访问和操作内存空间。

     在指针中,有两种特殊运算符:& 和 *;其中,&运算符是用来去地址的,而*运算符则是用来取值和声明指针的。

   指针的声明和使用:

 

	int*p;	//声明一个int 型指针
	int x=37;
	p=&x; //p为x变量的地址

   从指针的使用来看,指针指向了一个变量,于是,在对变量的值进行操作时,我们有了两种思路:一是直接改变变量的值;二是通过指针来间接改变变量的值。在对单个变量进行运算时,这两种方法看似相同,但是在对数组进行运算时,即处理大数据量时,指针运算就比数组运算快了,这时,指针的优势就显示了出来。

  以前在学习VB的时候,是把数组和循环放在一起学习的,一般处理非常小的问题是不用数组和循环的,但是,当碰到需要重复处理的大的数据量的时候,就要用到数组和循环,在C++里面,提供了指针,用指针加上循环,处理起来会更快,所以,指针和数组在使用中,也具有密不可分的联系。

    虽然指针有诸多好处,但是,也是存在漏洞的:比如,指针的悬挂问题:即两个指针指向一个空间,一个指针所指向的空间被删除,另一个指针所指向的空间也就被删除了。例如:

#include<iostream>
#include<cstring>
using namespace std;
void suspension(char * s);

void suspension(char * s)
{
	cout<<s<<endl;  //输出指针所指区域的内容
	delete s;   //释放指针所指空间

}

int main()
{
	char * p;
	p=new char[100];     //声明p所指空间的大小
	strcpy(p,"c++ language");    //在p所指向的空间内放入字符
	suspension(p);          //输出p所指内容,并且同时释放形参s指向的内存空间
	cout<<p<<endl;           //输出指针p所指的内容,但是因为此区域已被释放,所以出现了指针悬空问题
	return 0; 

}

如上,p和s同时指向一个空间,当s指向的空间内容被释放了,p就成了空指针,造成了指针悬空的问题。


引用

   引用是个别名。就像以前使用API函数一样,因为名字太长了,给它重新起个好用的名字。

  

例如:

Int i=1;

Int&r=I;

此处r初始化为对i的引用。在此,要求i已经声明或定义,而引用仅仅是它的别名。

建立时需用一个数据对象的名字进行初始化,以指定该引用所代表的的数据对象。此后,对引用的任何操作实际上就是对所代表的数据对象的操作。系统不会为引用再次分配存储空间。


引用示例:

bubuko.com,布布扣

 

引用和指针

       1,创建指针的时候,可以不初始化,但是创建引用的时候,要立即对其初始化。

         2,指针则可以在任何时候改变为指向另一个对象,但是,一旦一个引用被初始化为一个对象的引用,它就不能再被改变为另一个对象的引用,从这种程度上看,引用像是静态变量,一旦被赋值,程序运行中不可改变,但是指针像动态变量,一有需要,可以随时改变。

       3,引用和一块合法的存储空间关联,即:不可能有NULL引用。必须确保引用是对具体合法的对象的引用

       4,如果有占用空间大的对象需要作为函数参数传递的时候,在C中往往使用指针,而在C++中,既可以使用指针,也可以使用引用。引用作为参数的最大好处是可以像指针那样工作,其使用方式又和一般变量相同。所以,引用比指针有更好的可读性。

     ,



C++指针和引用

原文:http://blog.csdn.net/lhc1105/article/details/19298191

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!