c++ - 指向常量和常量指针的指针
问题描述
在一本书中写道,我们无法更改指向 const 的指针所引用的内存,例如:-
int a = 0, b = 2;
const int* pA = &a; // pointer-to-const. `a` can't be changed through this
int* const pB = &a; // const pointer. `a` can be changed, but this pointer can't.
const int* const pC = &a; // const pointer-to-const.
//Error: Cannot assign to a const reference
*pA = b;
pA = &b;
*pB = b;
然后我写了一个代码来检查这个,在那里我声明了指向 const 的指针,但改变了它的内存位置,它运行了,但它应该给出错误 - >
#include <iostream>
int main()
{
int a=12;
const int* ptr;
ptr = &a;
std::cout<<*ptr<<"\n";
std::cout<<ptr<<"\n";
std::cout<<*ptr<<"\n";
int b=20;
ptr=&b;
std::cout<<*ptr;
return 0;
}
解决方案
首先我们来了解一下是什么意思
const int *p;
上面这行意味着 p 是一个指向 const 整数的指针。这意味着 p 保存的是“const int”类型的变量的地址。这仅仅意味着您可以更改指针“p”的值。但是不能更改地址“p”所在的变量,因为它是 const int 类型。现在,如果你这样做
int* const p;
这意味着现在的指针是 const 类型并且保存着一个整数变量的地址。所以,这里的指针不能改变,但它指向的变量的值可以。
推荐阅读
- c# - 如何使用itext7从标记的pdf中的结构元素中提取文本
- html - 将 svg 路径分成 3 部分
- java - 在 MVC 测试中使用 Hamcrest 匹配 LocalDateTime
- php - 将值从一个表插入到另一个表sql和php
- python - 如何解决超时异常硒python?
- html - 带有反应的导航菜单
- cross-compiling - 如何在amd64上安装OpenGL arm64库进行交叉编译
- matlab - 如何在 Octave 中打印 symfunc 使其看起来是人工键入的而不是人工编写的?
- c++ - 在 DirectX 11 中高效捕获帧
- react-native - 反应导航错误无法解析 originModulePath