前言
今天要讲的是关键字const,constant在英文里有恒定的,不变的意思,在C语言中,const
关键字用于声明一个变量为常量,即这个变量的值在初始化之后就不能被修改,const
修饰的变量在程序运行期间保持其值不变,这有助于保护数据,防止意外修改,并提高程序的可读性。
基本使用
const
修饰基本类型变量
下面是一个const修饰int a 的一个示例;
#include <stdio.h>
int main() {
const int a = 100; // max 是一个常量,其值不能被修改
// a = 200; // 这行代码会导致编译错误
printf("a = %d\n", a);
return 0;
}
如果你尝试修改a的值的话,就会被编译器阻止。
const
修饰指针
当你使用 const
修饰指针时,有两种常见的用法:
- 指向常量的指针(
const
在*
左侧):这意味着指针指向的值不能被修改。 - 常量指针(
const
在*
右侧):这意味着指针本身不能被修改(即不能指向另一个地址)。
指向常量的指针
const int *ptr;
这表示 ptr
可以指向一个 int
类型的常量,但你不能通过 ptr
修改它所指向的值。
常量指针
int * const ptr;
这表示 ptr
是一个指向 int
的常量指针,即 ptr
的值(即它所指向的地址)不能被修改,但你可以修改它所指向的值。
指向常量的指针 示例
#include <stdio.h>
int main() {
const int num = 10;
const int *ptr = #
// *ptr = 20; // 这会导致编译错误,因为 *ptr 是常量
printf("*ptr = %d\n", *ptr);
return 0;
}
注意;
const
只影响变量的可修改性,不影响它的生命周期或作用域。const
指针和指针const
是不同的概念。const
指针指的是指针本身的值(即指向的地址)不可变,而指针const
指的是指针指向的内容不可变。const
的作用范围可以限定在函数参数、局部变量、全局变量或数组元素上。- 在多线程环境中,仅仅使用
const
并不能保证变量的线程安全。如果需要跨线程保护常量数据,可能需要使用其他同步机制。