c++ 指针指向const变量
时间: 2023-06-29 17:14:40 浏览: 124
在 C++ 中,可以使用指向常量的指针来指向常量变量。这种指针不能用来修改所指向的变量的值,但可以用来读取变量的值。
例如,以下代码定义了一个指向常量的指针:
```cpp
const int num = 10;
const int *p = #
```
在这个例子中,`num` 被声明为常量,其值不能被修改。`p` 被声明为指向常量的指针,因此不能使用 `p` 来修改 `num` 的值,但可以使用 `p` 来读取 `num` 的值。
需要注意的是,指向常量的指针可以指向非常量变量,但是反过来不行。例如,以下代码是合法的:
```cpp
int num = 10;
const int *p = #
```
但是,以下代码是不合法的:
```cpp
int *p = #
const int *q = p; // 错误:不能将指向非常量的指针转换为指向常量的指针
```
这是因为指向非常量的指针可以用来修改变量的值,而指向常量的指针不能用来修改变量的值。如果将指向非常量的指针转换为指向常量的指针,那么就可能通过指向常量的指针来修改变量的值,这是不安全的。
相关问题
c++ 如何给const 变量赋值
在C++中,给`const`变量赋值通常发生在以下几个场景:
1. 初始化时直接赋值[^1]:
```cpp
const int myConstValue = 10; // 直接创建一个常量整数值
```
2. 对于`const`指针,可以在初始化时或通过非`const`指针间接赋值[^2]:
```cpp
// 初始化时直接赋值
const int* ptrToConst = &value;
// 先用非const指针赋值,然后转为const
int* nonConstPtr = &value;
const int* ptrToConst2 = nonConstPtr;
```
3. 如果需要改变`const`指针所指向的内容(比如在一个`const`对象上临时解除`const`限制),可以使用`const_cast`:
```cpp
const int* ptr = &value;
int* mutablePtr = const_cast<int*>(ptr);
*mutablePtr = newValue; // 注意这不是常规操作,可能会导致程序错误
```
但是,重要的是要理解,一旦声明为`const`,就不能修改其值,即使是指针也无法指向可变的对象并改变它。
C++常量指针指向变量和指向常量有什么区别吗
有区别。
一个 C 常量指针是指向常量的指针,它指向的值在程序执行期间是不会被修改的,因此无论对指针所指向的值进行什么操作,都会引发编译器的警告或错误。例如:
```c
const int num = 10;
int* const ptr = # // 错误,常量指针不能指向非常量变量
*ptr = 20; // 错误,常量指针指向的值是常量,不能修改
```
另一方面,一个指向变量的指针可以用来修改指针所指向的变量。例如:
```c
int num = 10;
int* const ptr = # // 指向变量的常量指针
*ptr = 20; // 正确,指针指向的是变量,可以修改
```
因此,常量指针和指向变量的指针是有区别的。
阅读全文