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

函数参数int *ptr与int ptr[]的区别及代码选用建议

函数参数int *ptr与int ptr[]的差异分析

本质完全等价:编译层面的统一处理

在C语言的编译规则中,函数参数里的int ptr[]会被编译器自动转换为int *ptr。这意味着两种写法最终生成的机器代码完全一致,函数接收的都是数组首元素的内存地址,功能上没有任何区别。

比如你给出的两个代码示例,调用foo(a)时,都是将数组a的首地址传递给函数;在foo内部,对ptr的操作(如ptr[0]取值、ptr++指针偏移)行为完全相同。

语法表象的表意差异

虽然功能无差,但两种写法的语义暗示不同:

  • int *ptr:强调这是一个通用整型指针,它可以指向单个整型变量,也可以指向数组首元素,表意更宽泛。
  • int ptr[]:写法上更直观地表明参数预期接收的是数组,能让阅读代码的人快速理解参数用途,可读性更强。

代码编写的选用建议

  • 若函数专为处理数组设计,优先用int ptr[],它的语义更清晰,能直接传递参数的预期用途,降低代码理解成本。
  • 若函数参数既可以是单个变量的指针,也可以是数组指针(比如通用内存操作函数),或想强调指针的通用性,就用int *ptr。

注意:无论用哪种写法,函数内部都无法直接获取原数组的长度,若需处理完整数组,通常要额外传递一个表示数组长度的参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:03:19