首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >常量指针的意义是什么?

常量指针的意义是什么?
EN

Stack Overflow用户
提问于 2011-10-10 23:48:02
回答 9查看 33K关注 0票数 152

我说的不是指向const值的指针,而是const指针本身。

除了最基本的东西之外,我还在学习C和C++,直到今天我才意识到指针是通过值传递给函数的,这是有意义的。这意味着在函数内部,我可以让复制的指针指向其他值,而不会影响调用者的原始指针。

那么,拥有一个函数头有什么意义呢?

代码语言:javascript
复制
void foo(int* const ptr);

在这样的函数中,你不能让ptr指向其他的东西,因为它是const,你不想修改它,但是像这样的函数:

代码语言:javascript
复制
void foo(int* ptr);

工作做得也一样好!因为无论如何都会复制指针,即使您修改了副本,调用方中的指针也不会受到影响。那么const的优势是什么呢?

EN

回答 9

Stack Overflow用户

发布于 2011-10-10 23:51:55

你说得对,对于调用者来说,这完全没有区别。但对于函数的编写者来说,它可以是一个安全网“好吧,我需要确保我没有把这一点指向错误的事情”。不是很有用,但也不是无用的。

这基本上与程序中有一个int const the_answer = 42是一样的。

票数 14
EN

Stack Overflow用户

发布于 2011-10-12 09:50:08

如果您在具有内存映射设备的情况下进行嵌入式系统或设备驱动程序编程,则通常会使用两种形式的“const”,一种是为了防止指针被重新分配(因为它指向固定的硬件地址)。而且,如果它指向的外围寄存器是只读硬件寄存器,那么另一个const将在编译时而不是运行时检测到许多错误。

只读16位外设芯片寄存器可能如下所示:

static const unsigned short *const peripheral = (unsigned short *)0xfe0000UL;

然后,您可以轻松地读取硬件寄存器,而不必求助于汇编语言:

input_word = *peripheral;

票数 6
EN

Stack Overflow用户

发布于 2011-10-10 23:54:54

int iVal = 10;int *const ipPtr = &iVal;

就像普通的常量变量一样,常量指针必须在声明时初始化为一个值,并且它的值不能改变。

这意味着常量指针将始终指向相同的值。在上述情况下,ipPtr将始终指向iVal的地址。但是,因为指向的值仍然是非常量,所以可以通过取消引用指针来更改指向的值:

*ipPtr = 6;//允许,因为pnPtr指向非常数int

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7715371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档