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

C语言中两种指针参数语法形式是否完全等价?

C语言中指针参数两种语法形式的等价性分析

在C语言的函数参数声明里,int* p和int p[]这两种写法完全等价,编译器会将它们统一解析为指向int类型的指针。

这是因为C标准有明确规定:当数组类型作为函数参数时,会被自动转换为指向该数组元素类型的指针。换句话说,int p[]只是int* p的一种语法糖,写法不同,但编译后的逻辑和行为没有任何区别。

拿你给出的代码举例:

void fx1( int* p ){
    *p = 10;
}

void fx2( int p[] ){
    *p = 10;
}

int main(){
    int a = 20;
    fx1(&a);
    fx2(&a);
}

这段代码里,fx1和fx2的功能完全一致,调用它们都会把变量a的值修改为10。哪怕你在fx2里用数组下标语法p[0] = 10,效果也和*p = 10相同——因为数组下标访问p[i]本身就等价于*(p+i),而这里的p本质就是指针。

需要注意一个常见误区:虽然int p[]看起来像数组,但它并不是真正的数组。比如你不能通过sizeof(p)来获取所谓的“数组大小”,因为p是指针,sizeof(p)得到的是当前平台下指针类型的字节数,而非数组的总字节数。这一点也能侧面印证两种写法的等价性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:29:52