You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用数组符号声明常量指针类型的函数参数?

问题解答

可以实现。核心是明确修饰函数参数中的指针本身为常量,同时保留数组符号的写法。

原理说明

C语言中,函数参数列表里的int array[]本质是int* array的语法糖——数组类型会自动退化为指向元素的指针。默认这个指针是可赋值的,要让它变成不能被重新赋值的常量指针,需要给指针本身加上const修饰。

两种实现方式

方式1:明确声明为常量指针(兼容所有C标准)

直接把参数写成int *const array,虽然看起来是指针写法,但完全等价于用[]声明的语义,同时限制了指针本身的赋值:

void bar(int *const array)
{
    static int temp[] = { 1, 2, 3 };
    array = temp; // 编译错误:常量指针无法被赋值,符合需求
}

方式2:保留[]符号(C99及以后支持)

如果你坚持要用数组方括号的写法,可以用int array[const],这是C99引入的语法,会被编译器解析为int* const array,效果完全一致:

void bar(int array[const])
{
    static int temp[] = { 1, 2, 3 };
    array = temp; // 同样触发编译错误
}

注意区分概念

别混淆两种const的位置:

  • const int array[]:等价于const int* array,限制的是不能通过指针修改数组元素,指针本身仍可赋值;
  • int *const array/int array[const]:限制的是指针本身不能被重新赋值,但仍可通过指针修改数组元素,这正是你需要的效果。

内容的提问来源于stack exchange,提问作者abelenky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:55:21