在C语言中,const关键字用于修饰变量,表示该变量的值是常量(实际上是只读变量),不可修改。当const修饰指针变量时,有两种情况:
1. const修饰指针所指向的内容:
const int *ptr;
这表示ptr是一个指向常量整数的指针,指针本身是可以修改的,但是不能通过ptr来修改所指向的整数值。例如:
int num = 10;
ptr = # // 合法,ptr指向num
*ptr = 20; // 非法,不能通过ptr修改num的值
2. const修饰指针变量本身:
int * const ptr;
这表示ptr是一个常量指针,指向的内容是可以修改的,但是指针本身是不可修改的。例如:
int num1 = 10, num2 = 20;
ptr = &num1; // 非法,不能修改ptr的值
*ptr = 30; // 合法,可以通过ptr修改num1的值
需要注意的是,如果同时使用const修饰指针变量和指针所指向的内容,可以将const关键字放在*号的前面或后面,效果是一样的:
const int *const ptr;
或者
int const * const ptr;
这两种写法都表示ptr是一个指向常量整数的常量指针,既不能修改指针本身的值,也不能通过指针修改所指向的整数值。
总结:看符号*的位置,*在const左边,const修饰的就是指针变量本身,*在const右边,const修饰的就是指针所指向的内容。