05 const修饰指针
-
const 修饰指针 -> 常量指针
常量指针的特点:指针的指向可以修改,但是指针指向的数据值不可以修改。#include
using namespace std; int main() { int a = 10; int b = 100; const int* p = &a; //常量指针 cout << *p << endl; //*p = 100; 常量指针指向的数据值不可以修改 p = &b; cout << *p << endl; system("pause"); return 0; } 运行结果:(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
10 100 请按任意键继续. . .
*p = 100
是错误的,因为const
修饰的指针是不可以修改数据值的。但是p = &b
是可以的,因为指针的指向是可以修改的。 -
const 修饰常量 -> 指针常量
指针常量的特点:指针的指向不可以修改,但是指针指向的数据值可以修改。#include
using namespace std; int main() { int a = 10; int b = 100; int * const p = &a; //指针常量 cout << *p << endl; *p = 200; cout << *p << endl; //p = &b; 指针常量:指针的指向不可以修改 system("pause"); return 0; } 运行结果:(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
10 200 请按任意键继续. . .
*p = 200
是正确的,因为const
修饰的常量可以修改数据值。但是p = &b
则错误的,因为指针的指向在指针常量不可以被修改。 -
const 修饰指针也修饰常量
#include
using namespace std; int main() { int a = 10; int b = 100; const int * const p = &a; //修饰指针也修饰常量 cout << *p << endl; //*p = 200; //p = &b; system("pause"); return 0; } 运行结果:(环境:Windows11 (arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
10 请按任意键继续. . .
在这里,
const
不仅修饰了指针,也修饰了常量。所以指针的指向和地址的内容都不可以修改。
如何记忆:
-
把
*
记忆成指针,把const
记忆为常量。const int * p
常量指针(可以修改指针/数据不可以被修改)。int * const p
指针常量(可以修改数据/指针不可以被修改)。 -
const
后面跟着什么,则什么就不可以修改。(比如const int * p
,const
后跟着*
,则解引用的修改不可以用了。int * const p
,const
后跟着p
,则p
不好修改了,也就是不好改地址了)
:-)