C++ pointer

记得大一刚接触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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值