|
|
1
30
当你为嵌入式系统设计C程序,或者需要引用同一内存的特殊用途程序(多处理器应用程序共享内存)时,你需要常量指针。 例如,我有一个 32 bit MIPs processor 这有一个 little LCD 我必须将LCD数据写入内存中的特定端口,然后将其发送到LCD控制器。 我可以#定义这个数字,但我还必须将其转换为指针,而当我这样做时,C编译器没有那么多选项。 此外,我可能需要它是volatile的,也可以强制转换,但使用提供的语法更容易、更清晰——一个指向volatile内存位置的const指针。 对于PC程序,一个例子是:如果你设计DOS VGA游戏(网上有学习基本低级图形的有趣教程),那么你需要写入VGA内存,这可能会被引用为常量指针的偏移量。 |
|
|
2
29
它允许您保护指针不被更改。这意味着您可以保护基于指针做出的假设,使其永不改变或免受无意修改,例如:
|
|
|
3
8
另一个例子: 如果你知道它是在哪里初始化的,你就可以避免将来的NULL检查。 编译器保证指针永远不会改变(变为NULL) |
|
|
4
6
在任何非const C++成员函数中
|
|
|
5
5
一种用途是在低级(设备驱动程序或嵌入式)代码中,您需要引用映射到输入/输出设备的特定地址,如硬件引脚。某些语言允许您在特定地址链接变量(例如Ada具有
其他时候,这只是防御性编码。如果你有一个指针 不应该 更改声明它是明智的 不能 改变。这将允许编译器(和lint工具)检测到修改它的错误尝试。 |
|
|
6
4
当我想避免对指针进行意外修改时(例如指针算术或函数内部),我总是使用它们。您还可以将它们用于Singleton模式。 'this'是一个硬编码的常量指针。 |
|
|
7
3
与“const int”相同。..如果编译器知道它不会改变,则可以基于此进行优化假设。
现在,编译器可以做很多事情来优化这个循环——只要它知道SomeOtherFunc()不会改变ptr的值。使用const,编译器知道这一点,并可以做出假设。如果没有它,编译器必须假设SomeOtherFunc将更改ptr。 |
|
|
8
2
我见过一些OLE代码,其中有一个从代码外部传入的对象,要使用它,你必须访问它传入的特定内存。因此,我们使用const指针来确保函数总是操纵通过OLE接口传入的值。 |
|
|
9
1
已经给出了几个很好的理由来回答这个问题(内存映射设备和简单的旧防御编码),但我愿意打赌,在大多数情况下,你看到这一点实际上是一个错误,目的是必须将item作为指向const的指针。 我当然没有数据来支持这种预感,但我仍然会打赌。 |
|
|
10
0
思考 类型* 和 const类型* 作为类型本身。然后,您可以看到为什么您可能想要这些类型的const。 |
|
|
11
-2
始终将指针视为int。这意味着
实际上可以被认为是
因此,const指针的简单含义是:
变成
因此,你也不能改变指针指向的地址,仅此而已。为了防止数据更改,您必须将其设置为指向const对象的指针。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |