📅  最后修改于: 2023-12-03 15:39:47.547000             🧑  作者: Mango
在 C++ 中,常量是指不能被修改的值。在某些情况下,我们需要定义一个指针,它指向的是一个常量,也就是说,指针所指向的值是不能被修改的。这就是指向常量的指针。
要定义一个指向常量的指针,需要在指针的类型前面加上 const
关键字。例如,如果我们想要定义一个指向整数常量的指针,可以这样定义:
const int* ptr;
这个定义中,*
表示指针,const
表示这是一个指向常量的指针,int
表示指针所指向的类型是整数。
注意,const
关键字可以放在 *
的任何一侧,如下所示:
const int* ptr1;
int const* ptr2;
这两个定义是等价的。
指向常量的指针可以指向常量或非常量对象,但它只能用于读取指针所指向的值。如果试图修改指针所指向的值,编译器会报错。
例如,我们可以定义一个整数常量和两个指向整数的指针(一个是指向常量的指针,一个是普通指针),并尝试修改它们所指向的值:
const int num = 10;
const int* ptr1 = #
int* ptr2 = # // 编译错误:无法将‘const int*’转换为‘int*’
*ptr1 = 20; // 编译错误:从‘const int*’到‘int*’的转换被禁止
*ptr2 = 20; // 可以运行,但是会导致未定义的行为
我们可以看到,在第一行中,我们定义了一个整数常量 num
,并将一个指向常量的指针 ptr1
指向它。由于 ptr1
是指向常量的指针,因此不能用于修改 num
的值。
在第二行中,我们试图将一个普通指针 ptr2
指向 num
,但是编译器报错,因为在 C++ 中,不能将一个指向常量的指针隐式转换为一个普通指针。
在第三行中,我们尝试使用指向常量的指针 ptr1
修改 num
的值,但是编译器报错,因为 ptr1
是指向常量的指针,不能用于修改所指向的值。
最后,在第四行中,我们使用普通指针 ptr2
修改 num
的值,可以正常运行,但是由于 num
是一个常量,修改它的值会导致未定义的行为,因此这样做不是一个好的实践。
const
关键字。const
关键字可以放在 *
的任何一侧。