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

为何Leetcode等场景下函数参数用指针而非int arr[]接收数组?

在Leetcode中为何用指针形式接收数组参数?

首先得明确一个C语言的核心规则:函数参数里的int arr[]本质是int *arr的语法糖,编译器会自动将其转换为指针类型。也就是说两种写法在编译后的效果完全一致,没有性能差异。那Leetcode这类场景更偏好int func(int *arr, int size)的原因,主要集中在可读性、避免误解和符合算法题的使用习惯上:

  • 消除认知歧义:很多新手会误以为int arr[]是把整个数组传递给函数,但C语言里数组永远不会被整体传递,只会传递首元素的指针。写int *arr能直接点明这一点,避免“数组被复制”的错误认知,让代码意图更直白。
  • 避免大小参数的误导:如果写int arr[10]这种带大小的数组参数,编译器会直接忽略这个数字,依然当成指针处理,但新手可能会误以为函数限制了输入数组的长度。用指针形式搭配显式的size参数,能彻底避免这种误导,符合算法题必须明确数组长度的要求(因为无法通过sizeof(arr)获取原数组大小)。
  • 与函数内操作保持一致:算法题中经常需要对数组进行指针式操作(比如arr++遍历、指向子数组起始位置等),用指针形式定义参数,和函数内部的代码写法更统一,阅读时不需要额外做“数组转指针”的心理转换,逻辑更连贯。
  • 体现灵活性:指针形式可以指向单个元素、动态分配的数组(如malloc创建的),甚至数组的中间位置,相比int arr[]的写法,更能体现这种灵活的指向能力,在处理子数组、滑动窗口等场景时,语义更自然。

总结来说,两种写法底层逻辑完全相同,但指针形式更贴合C语言数组传参的本质,也更符合算法题对代码清晰、无歧义的要求,所以在Leetcode这类场景中被广泛使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:27:40