const 修饰指针变ᰁ和引⽤变ᰁ:如果 const 位于⼩星星的左侧,则 const 就是⽤来修饰指针 所指向的变ᰁ,即指针指向为常ᰁ;如果 const 位于⼩星星的右侧,则 const 就是修饰指针 本身,即指针本身是常ᰁ。请举例说明
时间: 2024-09-27 11:12:48 浏览: 30
`const` 修饰指针或引用时确实有两种情况:
1. **修饰指针所指向的内容**:
当 `const` 放在指针前,如 `const int *p`,这意味着 `p` 是一个指向常量整数的指针。这里的 `const` 指的是 `*p`,即指针所指向的对象是不可修改的。例如,当你声明一个 `const int *p = &x;`,`p` 不允许修改 `x` 的值,只能读取它。
2. **修饰指针本身**:
如果 `const` 放在指针后,如 `int const *p`,那么 `p` 是一个指向常量地址的指针。这意味着 `p` 所指向的内存区域内的数据可以修改,但是指针本身以及它所指向的数据类型的指针不能被修改。比如,不能通过 `p` 修改指向的值,也不能重新赋值给另一个变量。
举个例子:
```cpp
int x = 5;
const int *p1 = &x; // p1指向常量整数值x
*p1 = 6; // 错误,不允许修改x的值
int y = 7;
const int *const p2 = &y; // p2是一个常量指针,既不能修改指针(p2),也不能修改*y (y)
*p2 = 8; // 错误,既不允许修改y的值,也不允许修改p2指向的地址
```
在这里,`p1` 只能读取,而 `p2` 甚至连读取都禁止了。
相关问题
const修饰指针指向的对象,指针可变,指针指向的对象不可变
const修饰指针指向的对象时,指针可变,但指针指向的对象不可变。这意味着通过该指针可以修改指针本身,但不能通过该指针修改所指向的对象的值。
当使用const修饰指针时,可以通过该指针读取所指向对象的值,但不能修改它。这样可以保在程序中不意外地修改了不应该被修改对象。
下面一个示例:
```
int num = 10;
int* const ptr = # // const修饰指针,指针本身不可变
*ptr = 20; // 可以修改指针所指向的对象的值
// ptr =; // 错误,不能修改指针本身
const int* const constPtr = # // const修饰指针和指向的对象,都不可变
// *constPtr = 30; // 错误,不能修改指针所指向的对象的值
// constPtr = nullptr; // 错误,不能修改指针本身
```
const 修饰指针
const 修饰指针可以有两种情况:
1. const 指针:const 可以放在 * 号的左边,表示指针所指向的值是常量,即不可修改。例如:
```cpp
const int* ptr; // ptr 是一个指向常量整数的指针,指针的值可以修改,但是指向的值不可修改
```
这意味着你不能通过 `*ptr` 修改指针所指向的值,但是可以修改指针本身。
2. 指针常量:const 可以放在 * 号的右边,表示指针本身是常量,即不可修改。例如:
```cpp
int* const ptr; // ptr 是一个指向整数的常量指针,指针的值不可修改,但是指向的值可以修改
```
这意味着你不能修改指针的值,但是可以通过 `*ptr` 修改指针所指向的值。
需要注意的是,const 修饰的是指针本身或者指针所指向的值,并不代表指针所指向的对象本身是常量。如果你希望同时将指针本身和指针所指向的值都定义为常量,可以将 const 放在 * 的左右两边:
```cpp
const int* const ptr; // ptr 是一个指向常量整数的常量指针,指针的值和指向的值都不可修改
```
阅读全文