mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 14:05:45 +02:00
2024年10月22日 09:46
This commit is contained in:
parent
9868df316b
commit
e4d8e77f98
@ -2052,33 +2052,21 @@ int main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3.3.2.3 指向常量的指针
|
#### 3.3.2.3 指针常量
|
||||||
|
|
||||||
* const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。const 和指针一起使用会有几种不同的顺序,如下所示:
|
* 语法:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// 指针常量:指向常量的指针
|
const int *p1;
|
||||||
// 表示该指针所指向的对象的值不能通过指针修改,但指针本身可以指向其他地址。
|
|
||||||
const int *p1; // 不能通过该指针去修改指向对象的值。
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// 指针常量:指向常量的指针
|
int const *p2;
|
||||||
// 表示该指针所指向的对象的值不能通过指针修改,但指针本身可以指向其他地址。
|
|
||||||
int const *p2; // 不能通过该指针去修改指向对象的值。
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```c
|
> [!NOTE]
|
||||||
// 常量指针,常量指针意味着指针本身是常量,不能指向其他地址,
|
|
||||||
// 但指针所指向的对象的值可以修改。
|
|
||||||
int* const p3; // 指针的值(即指向的地址)不能改变,但可以通过该指针修改指向对象的值
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
>
|
>
|
||||||
> 技巧:
|
> * ① 指针常量就是指向常量的指针,表示该指针所指向的对象的值是不能通过指针修改的,但是指针本身可以指向其它的地址。
|
||||||
>
|
|
||||||
> * ① const 离变量名近,就是用来修饰指针变量的,即:`const` 在 `*` 号之后,表示 **指针本身不能改变,但指向的值可以改变**。
|
|
||||||
> * ② const 离变量名远,就是用来修饰指针指向的数据,即: `const` 在 `*` 号之前,表示 **指向的值不能修改,但是指针本身可以修改**。
|
> * ② const 离变量名远,就是用来修饰指针指向的数据,即: `const` 在 `*` 号之前,表示 **指向的值不能修改,但是指针本身可以修改**。
|
||||||
|
|
||||||
|
|
||||||
@ -2093,18 +2081,32 @@ int main() {
|
|||||||
// 禁用 stdout 缓冲区
|
// 禁用 stdout 缓冲区
|
||||||
setbuf(stdout, nullptr);
|
setbuf(stdout, nullptr);
|
||||||
|
|
||||||
const int a = 10;
|
const int *p; // 或者 int const *p;
|
||||||
const int b = 20;
|
int a = 10;
|
||||||
const int *p1 = &a;
|
int b = 20;
|
||||||
// 错误,不能通过 p1 修改 a 的值
|
|
||||||
*p1 = 30; // [!code error]
|
p = &a; // 合法:可以改变指针指向
|
||||||
p1 = &b; // 合法:可以让 p1 指向 b
|
// 错误,不能通过指针修改 a 的值
|
||||||
|
*p = 30; // [!code error]
|
||||||
|
p = &b; // 合法:可以改变指针指向
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 3.3.2.4 常量指针
|
||||||
|
|
||||||
|
* 语法:
|
||||||
|
|
||||||
|
```c
|
||||||
|
int* const p3;
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> * ① 常量指针意味着指针本身是常量,不能指向其他地址,但指针所指向的对象的值可以修改。
|
||||||
|
> * ② const 离变量名近,就是用来修饰指针变量的,即:`const` 在 `*` 号之后,表示 **指针本身不能改变,但指向的值可以改变**。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* 示例:
|
* 示例:
|
||||||
@ -2117,42 +2119,20 @@ int main() {
|
|||||||
// 禁用 stdout 缓冲区
|
// 禁用 stdout 缓冲区
|
||||||
setbuf(stdout, nullptr);
|
setbuf(stdout, nullptr);
|
||||||
|
|
||||||
const int a = 10;
|
int a = 10;
|
||||||
const int b = 20;
|
int *const p = &a; // p 是常量指针,必须在定义时初始化
|
||||||
int const *p2 = &a;
|
|
||||||
// 错误,不能通过 p2 修改 a 的值
|
*p = 20; // 合法:可以通过指针修改 a 的值
|
||||||
*p2 = 30; // [!code error]
|
// 错误,不能改变指针的指向
|
||||||
p2 = &b; // 合法:可以让 p2 指向 b
|
p = &a; // [!code error]
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
3.3.2.5 指向常量的常量
|
||||||
|
|
||||||
|
#### 3.3.2.5 指针常量参数
|
||||||
* 示例:
|
|
||||||
|
|
||||||
```c
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
|
|
||||||
// 禁用 stdout 缓冲区
|
|
||||||
setbuf(stdout, nullptr);
|
|
||||||
|
|
||||||
const int a = 10;
|
|
||||||
const int b = 20;
|
|
||||||
int *const p3 = &a;
|
|
||||||
// 错误,不能通过 p3 的指向
|
|
||||||
p3 = &b; // [!code error]
|
|
||||||
*p3 = 30; // 合法:可以修改 a 的值
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 3.3.2.4 指针常量参数
|
|
||||||
|
|
||||||
* 在C语言中,单独定义 const 变量没有明显的优势,完全可以使用`#define`命令代替。
|
* 在C语言中,单独定义 const 变量没有明显的优势,完全可以使用`#define`命令代替。
|
||||||
|
|
||||||
@ -2221,7 +2201,7 @@ int main(){
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3.3.2.5 深入理解 const 关键字
|
#### 3.3.2.6 深入理解 const 关键字
|
||||||
|
|
||||||
* const 关键字修饰的变量,即:const 常量,一旦被定义就必须初始化,后面的任何赋值行为都将发生错误。
|
* const 关键字修饰的变量,即:const 常量,一旦被定义就必须初始化,后面的任何赋值行为都将发生错误。
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user