欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > C语言中,const关键字用法,详细解读

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

2025/5/8 13:50:34 来源:https://blog.csdn.net/jie18894575860/article/details/147674509  浏览:    关键词:C语言中,const关键字用法,详细解读

目录

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

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

‌1. 修饰普通变量‌

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

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

‌2. 修饰指针‌

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

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

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

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

(2) ‌常量指针‌

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

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

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

格式‌:const T *const p
特点‌:指针和指向的内容均不可修改。

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

‌3. 函数参数中的const‌

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

‌示例‌:

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

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

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

‌示例‌:

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

‌5.注意事项‌

‌1)初始化要求‌:

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

const int x;  // 错误:未初始化

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

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

const int a = 10;
int *p = (int*)&a;
*p = 20;  // 未定义行为!

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

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

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

‌6.与#define的区别‌

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

‌总结‌
用法示例 含义

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词