博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ pointer
阅读量:5086 次
发布时间:2019-06-13

本文共 1732 字,大约阅读时间需要 5 分钟。

记得大一刚接触C的时候,指针是最头疼的,最近C++中又碰到它了,有一些零碎的东西需要整理一下。

学了两年计算机,说说自己对指针很浅显的认识,指针这个概念继承自汇编,可以直接操纵内存,很灵活,灵活性大了,不稳定因素自然就产生了(代码段、数据段安全性问题),中级语言C、C++都兼容指针,因此他们很适合有高性能需求的开发,高级语言Java、C#等完全面向对象语言中回避了指针的概念,比如C#中的委托是对方法的封装,其实不就是函数指针集嘛。:)

 

const对象、指向const对象的指针、const指针(通过一个面试题来了解)

 

1.const对象

  (1)关于const,很多企业的笔试、面试都会出现,很简单,就问你“const的含义?”。

我不清楚大家的回答,我的第一反应是常量,然后我想到了C#中关于const的解释(static and read-Only),于是我想到了只读,我只想到这么多。

看一下答案吧:

答:我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)

:)自己勉勉强强过关,下面有网友提供了更丰富一点的答案:

1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现

这个说明const在提高代码“可读性”,“健壮性”还是很有效的。

 

2. 指向const对象的指针

(1)

//指向const对象的指针const int i = 1024;//注意初始化const int *ip = &i;

(2)将const对象的地址给普通指针会编译出错

const double d = 3.14;double *dp = &d;//error:因为dp会默认它所指向的对象是可修改的,如果正确的话,意味着可以通过*dp来修改d的值,这样显然不可以。

(3)相反允许将非const对象的地址给”指向const对象的指针“

double d = 3.14;const double *dp = &d;//ok:同理,dp默认d是const对象,所以不可以通过*dp来修改d的值

 

3.const指针(注意:定义时必须初始化)

(1)

int i = 0;int *const ip = &i;

(2)* 指向const对象的const指针

const double d = 3.14;const double *const dp = &d;

 

4.Tips

(1)我们在阅读这类表达式时最好是“从右到左”的顺序,会便于理解

(2)在表达式中我们可将*理解为“point to”,如

const double d = 3.14;const double *const dp = &d;//dp is const point to double value which is const

 

5.附送一道小题目,很简单,别看花了眼哈

const int a;int const a;const int *a;int *const a;int const *a const;

 

 

 

 

 

转载于:https://www.cnblogs.com/huanchuanjian/archive/2012/07/07/2580213.html

你可能感兴趣的文章
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
15 FFT及其框图实现
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>
3.0.35 platform 设备资源和数据
查看>>
centos redis 安装过程,解决办法
查看>>
IOS小技巧整理
查看>>
WebDriverExtensionsByC#
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
sublime 配置java运行环境
查看>>
在centos上开关tomcat
查看>>
重启rabbitmq服务
查看>>
正则表达式(进阶篇)
查看>>
无人值守安装linux系统
查看>>
【传道】中国首部淘宝卖家演讲公开课:农业本该如此
查看>>
jQuery应用 代码片段
查看>>