【C语言】_const修饰指针变量
目录
1. 关于const修饰变量(常变量)
2. 使用指针解引用修改常变量的值:
3. 关于const修饰指针
3.1 指针类型* const 指针变量 = &变量(const在*右)
3.2 指针类型 const * 指针变量 = &变量(const在*左)
3.3 指针类型 const * const 指针变量 = &变量
1. 关于const修饰变量(常变量)
代码示例1:
当const修饰变量时,表示该变量具有常属性(不能被修改);
注:对于C++程序,const修饰的变量就是常量;
代码示例2:
const修饰的变量a不可用于数组下标寻址,报错为应输入常量表达式,故const修饰的变量虽然具有常属性,但仍是变量,而不是常量,称之为常变量;
2. 使用指针解引用修改常变量的值:
int main() {
const int a = 10;
int* pa = &a;
printf("a = %d\n", a);
*pa = 0;
printf("a = %d\n", a);
return 0;
}
运行结果如下:
虽然通过const修饰变量不能直接修改,但可使用其指针变量对其进行修改;
但使用const修饰变量的初衷就是使得该变量不可被修改,故而引入const修饰指针:
3. 关于const修饰指针
对于如下代码:
int main() {
int a = 10;
int b = 20;
int* p = &a;
p = &b;
return 0;
}
约定某一起始逻辑地址,其内存存储单元地址及内容如下:
3.1 指针类型* const 指针变量 = &变量(const在*右)
1、代码示例1:修改指针变量的值:
int main() {
int a = 10;
int b = 20;
int* const p = &a;
p = &b;
return 0;
}
运行结果如下:
2、代码示例2:修改指针变量指向的变量的值:
int main() {
int a = 10;
int b = 20;
int* const p = &a;
*p = b;
printf("%d\n", a);
return 0;
}
运行结果如下:
对于指针类型* const 指针变量 = &变量,
const直接修饰指针变量,限制指针变量本身,表示指针变量的值不可被修改,即该指针变量不可再指向其他变量;
而指针变量指向的变量值可以修改;
3.2 指针类型 const * 指针变量 = &变量(const在*左)
1、代码示例1:修改指针变量的值:
int main() {
int a = 10;
int b = 20;
int const *p = &a;
p = &b;
return 0;
}
运行结果如下:
2、代码示例2:修改指针变量指向的变量的值:
int main() {
int a = 10;
int b = 20;
int const *p = &a;
*p = b;
return 0;
}
运行结果如下:
对于指针类型 const *指针变量 = &变量,
const修饰解引用的指针变量,限制指针变量指向的变量,表示指针变量指向的变量的值不可通过指针被修改;
而指针变量本身的值可以修改,即指针变量的指向可修改;
3.3 指针类型 const * const 指针变量 = &变量
在*两端都加const修饰指针变量:
int main() {
int a = 10;
int b = 20;
int const* const p = &a;
p = &b;
*p = b;
return 0;
}
运行结果如下:
在*两端都加const修饰指针变量,表示指针变量本身的值和指针变量指向的变量的值都不可被修改;