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能提高代码健壮性,明确程序中数据的读写权限,减少错误。

相关推荐
fouryears_2341732 分钟前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~1 小时前
C#---StopWatch类
开发语言·c#
lifallen2 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研2 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
cui__OaO4 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试4 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
艾莉丝努力练剑5 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
CHEN5_025 小时前
【Java基础面试题】Java基础概念
java·开发语言
Cx330❀6 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
杜子不疼.6 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习