const指针、void指针

本文详细介绍了C++中const关键字与指针结合使用的三种情况:指向常量的指针变量、常指针以及指向常量的常指针,并解释了void指针的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const可以指定指针是一个常量,或者指定指针变量指向的对象是一个常量。有以下几种情况:


1、指向常量的指针变量:

const  类型名  *指针变量名;

不允许通过指针变量改变它指向的对象的值。


2、常指针

类型名  *const  指针变量名;

指针值不能改变;必须在定义时初始化,指定其指向;指针变量的指向不能改变,但其指向变量的值可以改变。


3、指向常量的常指针

以上两种作用的叠加。即指针变量指向一个固定的对象,该对象的值不能改变。



void指针不指向任何类型的数据。可理解为“指向空类型”或“不确定类型”的数据。

### 关于 `const void` 指针的用法与含义 在 C++ 中,`void*` 是一种通用指针类型,它可以指向任何数据类型的对象。当我们将它声明为 `const void*` 或者 `void const*` 时,则表示该指针所指向的内容是不可修改的。 #### 定义与解释 如果定义了一个 `const void* ptr` 的变量,这意味着通过这个指针无法改变其指向的数据内容[^1]。具体来说: - **`const void*`**: 表明此指针指向的是一个常量区域中的数据,即不允许解引用后对该内存地址上的值进行更改操作。 例如下面这段代码展示了如何利用 `const void*` 来保护原始数据不被意外改动: ```cpp #include <iostream> using namespace std; int main() { int value = 42; // Declare a constant pointer to void. const void *pConstVoid = &value; cout << "Value before cast: " << *(reinterpret_cast<const int*>(pConstVoid)) << endl; // Attempting direct modification will cause compile-time error. // reinterpret_cast<int *>(pConstVoid) = 99; // Error! return 0; } ``` 上述例子中尝试直接转换并赋新值得到编译器报错提示因为违反了只读属性约束条件[^1]. 另外值得注意的一点是在实际开发过程中应尽量减少强制类型转换尤其是涉及到移除const限定符的操作如使用`const_cast`,除非确实必要并且完全理解后果后再行动. 对于为何要采用这种方式而非简单地依赖#define宏来实现类似功能则可以从另一个角度考虑——提高可维护性和安全性方面来看待static consts优于传统预处理指令之处在于前者提供了更强健的作用域控制机制以及更清晰直观的表现形式[^2]: ```cpp class ExampleClass{ public: static const float Gravity=9.8f;//Better practice than using #define GRAVITY 9.8F }; ``` 最后关于类外成员函数声明时候需要注意加上完整的命名空间前缀包括类名加作用域解析运算符::来进行区分不同上下文中可能出现同名实体的情况同时也不必再额外注明诸如extern或者virtual之类的修饰词项[^3]. 至于基础数据类型部分列举了几种常见内置原语型态及其相应初始化方式供参考学习之用[^4]: ```cpp bool myBool=true; char myChar='A'; short myShort=-32768; int myInt=2_147_483_647; long myLong=9_223_372_036_854_775_807L; float myFloat=3.1415926535F; double myDouble=2.7182818284D; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值