首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >指向整型或其他类型的常量指针是什么

指向整型或其他类型的常量指针是什么
EN

Stack Overflow用户
提问于 2021-05-11 18:30:28
回答 3查看 63关注 0票数 0

我正在读Kenneth Reek写的书Pointers on C关于常量指针

什么是指向整数的常量指针?

它们中的指针是常量(这意味着什么?)它的值不能被改变(它的值不应该是cpi=5的值,5是常量的值,应该被读取为常量,整数,或者是常量,这是一回事,整数是另一回事,请澄清),书中继续说but u are free to modify integer to which points to,所以基本上我可以做cpi=5,在下一行cpi=19,那么为什么我需要它们,它使常量呢?拥有我们所实现的常量指针。

代码语言:javascript
复制
int * const cpi;

作者还说int constant *pci是一个指向常量整数的指针。所以我可以改变指针值(问:我如何改变指针值,你能举个例子吗)

EN

回答 3

Stack Overflow用户

发布于 2021-05-11 18:51:55

这个const*右侧的int * const cpi意味着指针本身不能指向其他地方。它的用途并不多,基于指针的查找表几乎是唯一比较常见的用例。它们还用于在嵌入式系统的非易失性闪存中存储指针,而不是RAM。

const int* cpi是更常见的用法,这意味着指向的数据是只读的。这是在编写常量正确性函数接口时使用的。

更令人困惑的是,C允许您对类型限定符const和类型说明符int进行重新排序,因此int const*的含义与const int*完全相同。

票数 1
EN

Stack Overflow用户

发布于 2021-05-11 19:00:34

代码语言:javascript
复制
#include <stddef.h> // NULL

int main(void) {
    int foo = 42;

    int *ip = &foo;               // can change both `ip` and `*ip`
    int *const icp = &foo;        // cannot change `icp`, can change `*icp`
    const int *cip = &foo;        // can change `cip`, cannot change `*cip`
    const int *const cicp = &foo; // cannot change `cicp`, cannot change `*cicp`

    ip = NULL; // ok
    ip = &foo; // so that next line works
    *ip = -1;  // ok

//  icp = NULL; // nope
    *icp = -1;  // ok

    cip = NULL; // ok
//  *cip = -1;  // nope

//  cicp = NULL; // nope
//  *cicp = -1;  // nope

    int *const *j; // can change `j`, cannot change `*j`, can change `**j`;
}
票数 1
EN

Stack Overflow用户

发布于 2021-05-11 19:01:57

指针(1)的值与指针所指向的值(2)之间存在差异。因此,常量指针(适用于(2))和常量指针(适用于(1))之间也有区别。最好的解释是官方文档中Pointer declaration页面的"Constness“部分。

但总的来说:

(1)指针是一个变量,它将插槽的地址保存在内存中。在这个地址下可以是一些值(例如一个整数),可以使用解引用运算符*进行访问。因此,当更改指针的值时,您将更改它所指向的内存中的地址,但如果您有一个指向对象:int* const myPointer常量指针,则无法执行此操作

(2)指针所指向的值只是内存中的一个值。它也可以是某个变量值。因此,您可以使用取消引用运算符*更改指针指向的值。

代码语言:javascript
复制
int myValue = 5;
int* myPointer = &myValue;

std::cout << *myPointer << std::endl;  // prints: 5

*myPointer = 13;  // changing the value of a variable which pointer points to

std::cout << myValue << std::endl;  // prints: 13

但是如果你有一个指向常量const int* myPointer指针,你将无法做到这一点。

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

https://stackoverflow.com/questions/67484951

复制
相关文章

相似问题

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