特大喜讯:智盟培训将于2011年11月 份隆重推出已上线商用项目案例实训课程,课堂案例选用一家中型门户网站作为实训的授课内容。授课老师是该网站项目的技术负责人。网站采用微软Windows Server 2008+ASP.NET4.0平台,开发语言采用C#语言。此网站项目架构设计优秀、技术先进。敬请喜欢的朋友时刻关注本站最新公告!咨询电话:010-52850976
分类:c++培训专题|来源:CSDN|发布时间:2011-4-11 8:41:17
指针(Pointer)持有另一个对象的地址,使我们能够间接地操作这个对象。引用(Reference)有时候又称为别名,它可以用作对象的另一个名字。它们都是让你间接引用其他对象。
从语法的角度比较,二者主要区别如下:
1)指针用操作符"*"和"->",引用使用操作符"."。
2)引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候可以不初始化,在定义后面的任何地方重新赋值。
3)指针可以被重新赋值以指向另一个不同的对象。但是,引用则总是指向在初始化时被指定的对象,以后不能改变。
4)"sizeof(引用)"得到的是所指向对象的大小,而"sizeof(指针)"得到的是指针本身的大小。
5)指针和引用的加法(+)、减法(-)、自增(++)、自减(--)等运算意义不一样。
6)引用不支持引用数组,指针支持指针数组。
深入讨论:
上述答案可能不够完整,但是基本覆盖了指针和引用的主要区别。可能一些读者还想添加如下两个区别:
1)不存在NULL引用,引用必须与合法的存储单元关联,而指针则可以是NULL。
2)程序为指针变量分配内存区域,而引用不分配内存区域。对此,我不敢苟同。
首先,我们来看看是否存在NULL引用。C++不允许将引用初始化为NULL,所以如下的代码无法通过编译:
char& rc = NULL; // 让引用指向空值
但是,使用如下代码,我们就可以创建一个NULL引用,该代码的执行结果将是不确定的。
char *pc = 0; // 设置指针为空值
char& rc = *pc; // 让引用指向空值
接着,让我们看看程序是否为引用分配内存区域呢?C++标准并没有对此作出规定,所以我认为这完全取决于编译器,我们不能武断地说程序会或不会为引用分配内存区域。
对于上述指针和引用区别中的第三点,我们可以以另外一种方式来陈述:引用全部是const类型,它总是指向在初始化时被指定的对象;指针有const类型。让我们借用《C++ FAQ》第二版章节11.13中的示例来解释一下这句话。
class Fred { };
void f(Fred& const a);
void g(const Fred& const a);
void sample(Fred& a)
{
Fred& b = a;
const Fred& c = a;
}
如果使用gcc,你会得到一些错误信息,该程序将无法通过编译。
本文来自智盟无忧net培训网(http://www.netpeixun.com),转摘请注明出处
本文标题:C++培训 TAG标签:PPT培训 WORD培训 EXCEL培训

版权声明:此网站相关信息如有侵犯您的版权,请及时通知我们,我们将及时加上您的版权信息或删除其内容,并向您致以诚挚的歉意。
报名咨询地址: 北京丰台区刘家窑桥东大陆写字楼A203室(每天早晨9:00到晚上18:00全天提供咨询和报名服务,周末照常服务)
IT培训/计算机培训/电脑培训/计算机上门培训 地址: 北京丰台区刘家窑桥东大陆写字楼A203室 邮政编码:100079
电脑培训/IT培训团体/企业培训联系电话:15101019808 010-52850976
MSN:zhimeng@live.cn QQ:120181366 || 客服邮箱:120181366@qq.com
Copyright(c) 2010 智盟科技 法律顾问:徐涛律师
京ICP备10025228号
特色培训:c++培训、office培训、vc++培训、mfc培训、vc++.net培训、windows sdk培训、vc界面培训