C/C++知识点之C++的复合类型 引用和指针
小标 2018-08-10 来源 : 阅读 1551 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C++的复合类型 引用和指针,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C++的复合类型 引用和指针,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

int ival = 1024;
int &refVal = ival;
// int &refVal2 ; // 报错:引用必须被初始化
int &refVal1 = ival, &refVal2 = ival, &refVal3 = refVal1, Val4=ival;
// refVal1/refVal2/refVal3都是引用,其中refVal3用另一个引用进行初始化
// Val4是一个int它并不是引用
复制代码
 

指针的初步认识
不管是否学过C或者C++对于指针这个东西只要是接触过计算机语言的,我相信都会对这个东西有所耳闻。

强大、底层、无限制、容易出错、容易崩溃、难以使用

让C/C++程序员又爱又恨的东西。

我认为,指针确实存在他的弊端,但是反过来想一下,如果你有足够的能力掌握它,那么它只会帮助你。

就像手枪,警察拿着它维护治安,军人拿着它保家卫国,匪徒则拿着它打家劫舍。

区中的区别不是手枪本人,而是持有它的人,或者准确的说是持有者的想法和做法。

指针同样有这个特性,在粗细大意的程序员手中,永远是噩梦.......

产品发布前一天,最后一次测试验证,却发现一个95%客户都会使用的功能频繁的导致软件崩溃。

最后检查到时指针使用问题。

只做了一个小小的修改,但是突然发现程序怎么运行都不对,不是结果偏离预期就是无缘无故的崩溃。

我想这类问题不是我一个人遇到过,有些项目经验,特别是进入过问题攻关团队的人一定深有体会。

下面来介绍一下指针最基础的知识,请注意领会。

复制代码
int *ip1, *ip2; // ip1和ip2都是指向int性对象的指针
double dp, *dp2; // dp2是指向double型对象的指针,dp是double型对象

// 如何对一个指针类型进行初始化
int ival = 42;
int *p = &ival; // p存放变量ival的地址,或者说p是指向变量ival的指针

double dval;
double *pd = &dval; // 初始化是double型对象的地址
double *pd2 = pd;    // 初始值是指向double对象的指针

int *pi = pd;     // 错误 类型不匹配
pi = &dval;       // 错误,依然是类型不匹配的原因

int ival = 42;
int *p = &ival; // p存放着变量ival的地址,或者说p是指向变量ival的指针
std::cout << *p; //由符号*得到指针p所指向的对象,输出42
*p = 0;  // 由符号*得到指针p所指向的对象,即可精油p为变量ival赋值
std::cout << *p;  // 输出0

int *p1 = nullptr;   // 等价于 int  *p1 = 0; 将指针赋值为空,代表一个空指针
// nullptr 是C++11中新引入的,如果没有对C++11支持请按照如下写法
int *p3 = NULL;


复制代码
指针的四种状态:

1. 指向一个对象

2. 指向紧邻对象所占空间的下一个位置

3. 空指针, 没有指向任何对象

4. 无效指针, 上述情况以外的其他情况

第四种情况是引发程序崩溃的唯一指针相关原因,编译器没有办法检查这种错误,所以必须靠程序员自己完成验证。

而第二和第三种情况,虽然有效,但是行为是受限的,所以不要试图访问这些指针。

 

我的建议,对于初学者来说需要详细掌握指针的每种特性细节,

在使用的时候要胆大心细,不要因噎废食。

因为永远记住一句话,如果不想犯错最好的方法是什么也不做,但是你同时也放弃了进步的可能。

多做多错这句话没错,而且很有道理,只是看你怎么去理解。

接下来介绍两个比较绕口的类型

 

1. 指向指针的指针

int ival = 1024;
int *pi = &ival;   // pi指向一个int型的数
int **ppi = &pi;  // ppi指向一个int型的指针
 

2. 指向指针的引用

复制代码
int i = 42;
int *p;         // p是一个int型的指针
int *&r = p; // r是一个对指针p的引用

r = &i;         // r引用了一个指针,因此给r赋值&i就是令p指向i
*r = 0;        // 解引用r得到i,也就是p指向的对象,将i的值改为0
复制代码
与指针或引用相关的表达式的阅读顺序一般是从右向左的。    

本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程