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

C语言变量作用域:未用指针时函数内数组修改为何能同步到主函数

问题解答

首先你的前提认知存在错误:这段代码本质上就是通过指针传递参数的,不存在「没有使用指针」的情况,这是C语言数组传参的固有特性导致的,具体原因如下:

  • C语言没有「将完整数组作为值直接传递给函数」的语法,只要你把数组名作为实参传入函数,数组名会自动隐式转换为指向数组首元素的指针,传递给函数的是数组首地址,不是整个数组的拷贝。
  • 函数参数列表里写的float PRICE[]、double amount[]这类数组形式的写法,只是C语言提供的语法糖,编译器处理时会直接将其等价转换为指针声明:float *PRICE、double *amount,和显式写指针没有任何区别。
  • extend函数的形参amount确实是该函数的局部变量,但它存储的值是main函数中amount数组的首地址。你在extend里写amount[i] = xxx的时候,本质是*(amount + i) = xxx的语法糖,相当于直接通过地址修改了main函数中原有数组对应位置的元素,所以修改结果自然会同步反映到main函数里。

你可以自行验证:把extend函数的声明和定义改成如下写法,运行效果和原代码完全一致:

void extend(float *PRICE, float *QUANTITY, double *amount);

内容的提问来源于stack exchange,提问作者Suresh Kumar M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:15:04