C语言中,const关键字用法,详细解读

目录

    • [‌1. 修饰普通变量‌](#‌1. 修饰普通变量‌)
    • [‌2. 修饰指针‌](#‌2. 修饰指针‌)
      • [(1) ‌指向常量的指针‌](#(1) ‌指向常量的指针‌)
      • [(2) ‌常量指针‌](#(2) ‌常量指针‌)
      • [(3) ‌指向常量的常量指针‌](#(3) ‌指向常量的常量指针‌)
    • [‌3. 函数参数中的const‌](#‌3. 函数参数中的const‌)
    • [‌4. 函数返回值中的const‌](#‌4. 函数返回值中的const‌)
    • ‌5.注意事项‌
    • ‌6.与#define的区别‌

在C语言中,const关键字用于定义只读变量或指针,增强代码的安全性和可读性。以下是const的详细用法及注意事项:

‌1. 修饰普通变量‌

‌作用‌:变量值不可修改,必须在定义时初始化。

‌示例‌:

c 复制代码
const int a = 10;  // 正确:声明时初始化
// a = 20;        // 错误:a是只读的
const float pi;    // 错误:未初始化

‌2. 修饰指针‌

const与指针结合时,需注意const的位置:

(1) ‌指向常量的指针‌

记忆 :看 const左边的

格式‌ :const T *p 或 T const *p
‌特点‌修饰 T(数据类型) , 剩下 *p 指针,所以const修饰常量内容。指针指向的内容不可修改,但指针本身可指向其他地址。

c 复制代码
int a = 10, b = 20;
const int *p = &a;
// *p = 30;       // 错误:不能修改指向的内容
p = &b;           // 正确:指针本身可改变

(2) ‌常量指针‌

‌格式‌ :T * const p
‌特点‌ :修饰 * , const修饰指针符号所以 指针p 不能变。指针本身不可修改(必须初始化),但指向的内容可修改。

c 复制代码
int a = 10;
int *const p = &a;
*p = 20;          // 正确:修改指向的值
// p = &b;        // 错误:指针不可改变

(3) ‌指向常量的常量指针‌

格式‌ :const T *const p

特点‌:指针和指向的内容均不可修改。

c 复制代码
	const int *const p = &a; 
	// *p = 20; // 错误:内容不可修改 
	// p = &b; // 错误:指针不可修改

‌3. 函数参数中的const‌

‌作用‌:防止函数内部意外修改参数指向的数据。

‌示例‌:

c 复制代码
void print(const char *str) {
    // str[0] = 'A';  // 错误:不能修改只读数据
    printf("%s\n", str);
}

‌4. 函数返回值中的const‌

‌作用‌:返回的指针指向的数据不可被修改。

‌示例‌:

c 复制代码
const char *getMessage() {
    return "Hello World";  // 字符串字面量是常量
}
int main() {
    const char *msg = getMessage();
    // msg[0] = 'h';      // 错误:不可修改
}

‌5.注意事项‌

‌1)初始化要求‌:

const变量必须在定义时初始化,否则编译错误。

c 复制代码
const int x;  // 错误:未初始化

‌2)通过指针强制修改const变量‌

虽然语法允许用指针绕过const限制,但这是‌未定义行为‌(可能导致程序崩溃):

c 复制代码
const int a = 10;
int *p = (int*)&a;
*p = 20;  // 未定义行为!

‌3)const变量不是常量表达式‌

在C89中,const变量不能用于数组长度等需要常量表达式的场景:

c 复制代码
const int size = 10;
int arr[size];  // C89中错误,C99支持变长数组(VLA)

‌6.与#define的区别‌

  • const变量有类型和地址,占用内存;
  • #define是预处理替换,无类型检查。

‌总结‌

用法示例 含义

const int a 变量a不可修改
const int *p/int const *p p指向的内容不可修改
int *const p 指针p不可指向其他地址
const int *const p 指针p和其内容均不可修改

合理使用const能提高代码健壮性,明确程序中数据的读写权限,减少错误。

相关推荐
AI科技星1 分钟前
全域数学·第三部·数术几何部·平行网格卷 完整专著目录(含拓扑发展史+学科定位·终稿)
c语言·开发语言·网络·量子计算·agi
SunnyDays10113 分钟前
Java 读写 Excel 公式:从基础到高级的实战总结
java·开发语言·excel
wb043072015 分钟前
Java 26
java·开发语言
白露与泡影8 分钟前
JVM GC调优实战:从线上频繁Full GC到RT降低80%的全过程
java·开发语言·jvm
灰灰勇闯IT9 分钟前
pyasc:用 Python 调用 CANN 的推理能力
开发语言·python
笨拙的老猴子1 小时前
[特殊字符] Java GC机制详解:G1、ZGC、Shenandoah全面解析与版本演进对比
java·开发语言
水木流年追梦1 小时前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
电子云与长程纠缠1 小时前
UE5制作六边形包裹球体效果
开发语言·python·ue5
枕星而眠1 小时前
Linux 四大进程/线程同步锁详解:互斥锁、读写锁、条件变量、文件锁
linux·c语言·后端·ubuntu·学习方法
砍材农夫1 小时前
物联网 基于netty构建mqtt协议规范(遗嘱与保留消息)
java·开发语言·物联网·netty