C语言如何将非const全局变量作为const在函数中使用?
解决方案
方法1:函数内定义const指针指向全局变量
直接在需要以const方式访问的函数内部,声明一个指向全局变量的const指针,后续通过该指针访问数组。编译器会严格限制对该指针指向内容的修改,满足调试阶段的检查需求,同时完全不需要复制数组,性能无损耗。
示例代码:
#include <stdio.h> #include <stdlib.h> // 全局非const数组 int value[2] = {0}; void myfun() { // 定义const指针指向全局数组,限制修改 const int* const val_ptr = value; printf("%d \n", val_ptr[1]); // 下面这行代码会触发编译错误,符合调试需求 // val_ptr[1] = 2; } int main() { // 主函数中可以正常修改全局数组 value[1] = 1; myfun(); return 0; }
方法2:函数内重新extern声明全局变量为const
在需要const访问的函数内部,用extern const重新声明全局变量。这种方式会让编译器在该函数范围内将变量视为const,直接通过变量名访问即可,无需额外指针。
示例代码:
#include <stdio.h> #include <stdlib.h> int value[2] = {0}; void myfun() { // 函数内声明该全局变量为const extern const int value[]; printf("%d \n", value[1]); // 尝试修改会触发编译错误 // value[1] = 2; } int main() { value[1] = 1; myfun(); return 0; }
关键说明
- 两种方法均为编译阶段检查,不会产生任何运行时开销,完全匹配性能要求。
- 针对GB级别的大数组,两种方法都不需要复制数据,直接复用原内存空间。
- 方法2需注意:若在同一文件中,函数内的
extern const声明仅在当前函数生效,不会改变全局变量的原始属性;跨文件场景下,确保全局变量的原始声明为非const,仅在需要限制的函数内添加extern const声明。
内容的提问来源于stack exchange,提问作者mallelog1
相关产品推荐
相关产品推荐

