当前位置:  开发笔记 > 编程语言 > 正文

const指针有什么用(与指向const对象的指针相对)?

如何解决《const指针有什么用(与指向const对象的指针相对)?》经验,为你挑选了5个好方法。

我经常使用const对象的指针,就像这样......

const int *p;

这只是意味着您无法更改p指向的整数p.但是我也看到了const指针的引用,这样宣称......

int* const p;

据我所知,这意味着指针变量本身是不变的 - 你可以改变它整天指向的整数,但你不能指出其他东西.

有什么可能的用途?



1> Adam Davis..:

当您为嵌入式系统设计C程序,或者需要引用相同内存的专用程序(共享内存的多处理器应用程序)时,您需要不断的指针.

例如,我有一个32位MIPs处理器,它附有一个小LCD.我必须将我的LCD数据写入内存中的特定端口,然后将其发送到LCD控制器.

我可以#define那个数字,但是我还必须将它作为指针投射,而C编译器在我这样做时没有那么多的选项.

此外,我可能需要它是volatile,也可以是cast,但使用提供的语法更容易和更清晰 - 一个指向易失性内存位置的const指针.

对于PC程序,一个例子是:如果你设计DOS VGA游戏(有在线教程很有趣,可以学习基本的低级图形),那么你需要写入VGA内存,这可能被称为偏移来自const指针.

-亚当


轻微的挑剔:对于内存映射设备,你当然(不是'可能')需要将项目标记为易失性 - 否则您无法确定编译器是否或何时实际发出读取或写入操作.

2> Andrew Johns..:

它允许您保护指针不被更改.这意味着您可以根据指针永不改变或无意修改来保护您所做的假设,例如:

int* const p = &i;

...

p++;     /* Compiler error, oops you meant */
(*p)++;  /* Increment the number */



3> Benedikt Wal..:

另一个例子:如果你知道它被初始化的地方,你可以避免将来的NULL检查.编译器保证指针永远不会改变(为NULL)...



4> Adam Rosenfi..:

在任何非const C++成员函数中,this指针都是类型C * const,其中C是类类型 - 您可以更改它指向的内容(即其成员),但是您无法将其更改为指向不同的实例C.对于const成员函数,this属于类型const C * const.还有(很少遇到)volatileconst volatile成员函数,其中this也有volatile限定符.



5> Michael Carm..:

一种用途是在低级(设备驱动程序或嵌入式)代码中,您需要引用映射到输入/输出设备(如硬件引脚)的特定地址.某些语言允许您链接特定地址的变量(例如Ada use at).在C中,最常用的方法是声明一个常量指针.请注意,此类用法还应具有volatile限定符.

其他时候它只是防御性编码.如果你有一个指针不应该改变它是明智的,声明它,使得它不能改变.这将允许编译器(和lint工具)检测错误的修改尝试.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有