c++ 指针指向const变量
时间: 2023-06-29 10:14:40 浏览: 60
在 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++常量指针指向变量和指向常量有什么区别吗
有区别。
一个 C 常量指针是指向常量的指针,它指向的值在程序执行期间是不会被修改的,因此无论对指针所指向的值进行什么操作,都会引发编译器的警告或错误。例如:
```c
const int num = 10;
int* const ptr = # // 错误,常量指针不能指向非常量变量
*ptr = 20; // 错误,常量指针指向的值是常量,不能修改
```
另一方面,一个指向变量的指针可以用来修改指针所指向的变量。例如:
```c
int num = 10;
int* const ptr = # // 指向变量的常量指针
*ptr = 20; // 正确,指针指向的是变量,可以修改
```
因此,常量指针和指向变量的指针是有区别的。
const修饰指针和变量
const关键字可以用来修饰指针和变量。如果const修饰的是指针,则指针所指向的值不能被修改,但是指针本身可以被修改。例如:
```c++
const int* p; // p是指向const int的指针,p所指向的值不能被修改
int const * p; // 与上一行等价
int x = 1;
p = &x; // 合法
*p = 2; // 不合法,p所指向的值不能被修改
```
如果const修饰的是变量,则变量的值不能被修改。例如:
```c++
const int x = 1; // x是一个const int,其值不能被修改
x = 2; // 不合法,x的值不能被修改
```
需要注意的是,const修饰的变量并不一定是常量,因为它的值可以在编译时期被确定。另外,在函数参数中应用const修饰符可以避免函数对变量的修改。