diff --git a/docs/notes/02_c-leap/05_xdx/index.md b/docs/notes/02_c-leap/05_xdx/index.md index f1f44e3..27d4805 100644 --- a/docs/notes/02_c-leap/05_xdx/index.md +++ b/docs/notes/02_c-leap/05_xdx/index.md @@ -2052,33 +2052,21 @@ int main() { } ``` -#### 3.3.2.3 指向常量的指针 +#### 3.3.2.3 指针常量 -* const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。const 和指针一起使用会有几种不同的顺序,如下所示: +* 语法: ```c -// 指针常量:指向常量的指针 -// 表示该指针所指向的对象的值不能通过指针修改,但指针本身可以指向其他地址。 -const int *p1; // 不能通过该指针去修改指向对象的值。 +const int *p1; ``` ```c -// 指针常量:指向常量的指针 -// 表示该指针所指向的对象的值不能通过指针修改,但指针本身可以指向其他地址。 -int const *p2; // 不能通过该指针去修改指向对象的值。 +int const *p2; ``` -```c -// 常量指针,常量指针意味着指针本身是常量,不能指向其他地址, -// 但指针所指向的对象的值可以修改。 -int* const p3; // 指针的值(即指向的地址)不能改变,但可以通过该指针修改指向对象的值 -``` - -> [!IMPORTANT] +> [!NOTE] > -> 技巧: -> -> * ① const 离变量名近,就是用来修饰指针变量的,即:`const` 在 `*` 号之后,表示 **指针本身不能改变,但指向的值可以改变**。 +> * ① 指针常量就是指向常量的指针,表示该指针所指向的对象的值是不能通过指针修改的,但是指针本身可以指向其它的地址。 > * ② const 离变量名远,就是用来修饰指针指向的数据,即: `const` 在 `*` 号之前,表示 **指向的值不能修改,但是指针本身可以修改**。 @@ -2093,41 +2081,32 @@ int main() { // 禁用 stdout 缓冲区 setbuf(stdout, nullptr); - const int a = 10; - const int b = 20; - const int *p1 = &a; - // 错误,不能通过 p1 修改 a 的值 - *p1 = 30; // [!code error] - p1 = &b; // 合法:可以让 p1 指向 b + const int *p; // 或者 int const *p; + int a = 10; + int b = 20; + + p = &a; // 合法:可以改变指针指向 + // 错误,不能通过指针修改 a 的值 + *p = 30; // [!code error] + p = &b; // 合法:可以改变指针指向 return 0; } - ``` +#### 3.3.2.4 常量指针 - -* 示例: +* 语法: ```c -#include - -int main() { - - // 禁用 stdout 缓冲区 - setbuf(stdout, nullptr); - - const int a = 10; - const int b = 20; - int const *p2 = &a; - // 错误,不能通过 p2 修改 a 的值 - *p2 = 30; // [!code error] - p2 = &b; // 合法:可以让 p2 指向 b - - return 0; -} +int* const p3; ``` +> [!NOTE] +> +> * ① 常量指针意味着指针本身是常量,不能指向其他地址,但指针所指向的对象的值可以修改。 +> * ② const 离变量名近,就是用来修饰指针变量的,即:`const` 在 `*` 号之后,表示 **指针本身不能改变,但指向的值可以改变**。 + * 示例: @@ -2140,19 +2119,20 @@ 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 的值 + int a = 10; + int *const p = &a; // p 是常量指针,必须在定义时初始化 + + *p = 20; // 合法:可以通过指针修改 a 的值 + // 错误,不能改变指针的指向 + p = &a; // [!code error] return 0; } - ``` -#### 3.3.2.4 指针常量参数 +3.3.2.5 指向常量的常量 + +#### 3.3.2.5 指针常量参数 * 在C语言中,单独定义 const 变量没有明显的优势,完全可以使用`#define`命令代替。 @@ -2221,7 +2201,7 @@ int main(){ } ``` -#### 3.3.2.5 深入理解 const 关键字 +#### 3.3.2.6 深入理解 const 关键字 * const 关键字修饰的变量,即:const 常量,一旦被定义就必须初始化,后面的任何赋值行为都将发生错误。