在C语言中,const关键字用于定义常量或限制变量的修改。它的主要作用是增强代码的可读性和安全性,防止意外修改数据。以下是const的常见用法及示例:
1. 定义常量
const可以用于定义常量,表示变量的值不可修改。
示例:
#include
int main() {
const int MAX_VALUE = 100; // 定义常量
// MAX_VALUE = 200; // 错误:常量不可修改
printf("Max Value: %d\n", MAX_VALUE);
return 0;
}
2. 修饰指针
const可以修饰指针,限制指针的指向或指向的值。
(1)指向常量的指针(指针指向的值不可修改)
const int *p; // 指针指向的值不可修改
int a = 10;
p = &a;
// *p = 20; // 错误:不能通过 p 修改 a 的值
a = 20; // 合法:直接修改 a 的值
(2)常量指针(指针本身不可修改)
int a = 10;
int *const p = &a; // 指针本身不可修改
*p = 20; // 合法:可以修改指向的值
// p = NULL; // 错误:不能修改指针的指向
(3)指向常量的常量指针(指针和指向的值都不可修改)
const int *const p = &a; // 指针和指向的值都不可修改
// *p = 20; // 错误:不能修改指向的值
// p = NULL; // 错误:不能修改指针的指向
3. 修饰函数参数
const可以用于修饰函数参数,防止函数内部修改参数的值。
示例:
#include
void printArray(const int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
// arr[i] = 0; // 错误:不能修改 arr 指向的值
}
printf("\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
printArray(arr, 5);
return 0;
}
4. 修饰函数返回值
const可以用于修饰函数返回值,表示返回值是常量,不可修改。
示例:
#include
const int* getValue() {
static int value = 100;
return &value;
}
int main() {
const int *p = getValue();
printf("Value: %d\n", *p);
// *p = 200; // 错误:不能修改返回值
return 0;
}
5. 修饰结构体成员
const可以用于修饰结构体成员,表示该成员不可修改。
示例:
#include
struct Point {
const int x; // x 不可修改
int y;
};
int main() {
struct Point p = {10, 20};
// p.x = 30; // 错误:x 是常量
p.y = 40; // 合法:y 可以修改
printf("x: %d, y: %d\n", p.x, p.y);
return 0;
}
6. 修饰全局变量
const可以用于修饰全局变量,表示该变量是常量,不可修改。
示例:
#include
const int GLOBAL_VALUE = 100; // 全局常量
int main() {
// GLOBAL_VALUE = 200; // 错误:全局常量不可修改
printf("Global Value: %d\n", GLOBAL_VALUE);
return 0;
}
7. 修饰局部变量
const可以用于修饰局部变量,表示该变量在作用域内不可修改。
示例:
#include
int main() {
const int localValue = 50; // 局部常量
// localValue = 60; // 错误:局部常量不可修改
printf("Local Value: %d\n", localValue);
return 0;
}
8. 修饰字符串常量
const可以用于修饰字符串常量,防止修改字符串内容。
示例:
#include
int main() {
const char *str = "Hello, World!";
// str[0] = 'h'; // 错误:不能修改字符串常量
printf("%s\n", str);
return 0;
}
总结
用法 | 描述 | 示例 |
定义常量 | 变量的值不可修改 | const int MAX_VALUE = 100; |
指向常量的指针 | 指针指向的值不可修改 | const int *p; |
常量指针 | 指针本身不可修改 | int *const p = &a; |
指向常量的常量指针 | 指针和指向的值都不可修改 | const int *const p = &a; |
修饰函数参数 | 防止函数内部修改参数的值 | void func(const int *arr); |
修饰函数返回值 | 返回值是常量,不可修改 | const int* getValue(); |
修饰结构体成员 | 结构体成员不可修改 | struct Point { const int x; }; |
修饰全局变量 | 全局变量是常量,不可修改 | const int GLOBAL_VALUE = 100; |
修饰局部变量 | 局部变量在作用域内不可修改 | const int localValue = 50; |
修饰字符串常量 | 防止修改字符串内容 | const char *str = "Hello, World!"; |
const关键字的使用可以显著提高代码的安全性和可读性,建议在适当的地方使用它来限制变量的修改。