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

C语言中为何用指针声明函数参数中的数组?附代码示例疑问

C语言数组作为函数参数:指针写法的原因与原理

一、为什么用指针声明数组参数?

在C语言里,数组作为函数参数传递时,本质就是传递数组首元素的地址——不管你写int T[]还是int *T,编译器都会把它当成指针处理。这么做的核心原因有两个:

  • 效率更高:如果直接传数组,会拷贝整个数组到函数里,数组越大越费内存、拖慢程序速度。传指针只需要传一个地址(通常4或8字节),开销极小。
  • 能修改原数组:像create函数需要给数组赋值,传指针可以直接操作原数组的内存空间。要是传数组拷贝,修改的只是副本,原数组根本不会有变化。

二、工作原理与逻辑

当你在main里调用create(T, n)时,数组名T会自动转换成指向数组首元素的指针(也就是&T[0])。函数里的int *T接收这个地址后,T[i]等价于*(T + i)——意思是从首地址往后偏移i个int大小的内存位置,直接操作原数组的元素。

三、为什么只有Create用指针写法?

这只是写法上的差异,两种写法完全等价!把print的int T[]改成int *T,或者把create的int *T改成int T[],程序运行结果完全一样。示例只是故意用两种写法展示:不管写数组形式还是指针形式,编译器都会当成指针处理。

比如把print改成指针写法,效果丝毫不差:

void print(int *T,int n){ 
    int i;
    for(i=0;i<n;i++) printf("[%d]",T[i]);
}

另外要注意:函数参数里的int T[]不能指定大小(比如写int T[100]),编译器会直接忽略这个大小,还是当成指针。所以不管用哪种写法,都必须额外传n来告诉函数数组长度,不然函数没法知道数组有多少元素。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:35:38