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

相关推荐
朱颜辞镜花辞树‎40 分钟前
Go Web 后台管理系统项目详解
开发语言·前端·golang
学地理的小胖砸1 小时前
【Python 模块】
开发语言·python
xa138508691 小时前
ARCGIS PRO DSK 选择坐标系控件(CoordinateSystemsControl )的调用
java·开发语言·arcgis
沐雨潇竹1 小时前
Qt 中信号与槽(signal-slot)机制支持 多种连接方式(ConnectionType)
开发语言·qt
彷徨而立1 小时前
【C/C++】errno/strerror 和 GetLastError()/FormatMessage 的区别
c语言·windows api
mozun20202 小时前
QT:qt5调用打开exe程序并获取调用按钮控件实例2025.5.7
开发语言·数据库·qt·测试用例·控件·外部调用
末央&2 小时前
【数据结构】手撕二叉搜索树
开发语言·数据结构·c++
一个天蝎座 白勺 程序猿2 小时前
Python爬虫(20)Python爬虫数据存储技巧:二进制格式(Pickle/Parquet)性能优化实战
开发语言·爬虫·python
珹洺2 小时前
C++从入门到实战(十二)详细讲解C++如何实现内存管理
c语言·开发语言·数据结构·c++
iuyou️2 小时前
Java泛型
java·开发语言·javase·范型