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

向函数传递数组时的类型差异疑问:代码为何能正常运行?

关于C++数组作为函数参数的类型匹配问题
#include <iostream>
using namespace std;

void myFunction(int myNumbers[5]) {
  for (int i = 0; i < 5; i++) {
    cout << myNumbers[i] << "\n";
  }
}

int main() {
  int myNumbers[5] = {10, 20, 30, 40, 50};
  myFunction(myNumbers);
  return 0;
}

myFunction的形参类型声明为int [5],但调用时传入的实参类型是int*,为何这段代码仍能正常运行?请帮忙解释原因。

这是C++(继承自C语言)的语法特性导致的:当数组类型作为函数形参时,编译器会自动将其调整为指向数组元素类型的指针。也就是说,你写的int myNumbers[5]作为形参,编译器实际会把它当成int* myNumbers处理。

具体细节:

  • 在main函数里传递数组名myNumbers时,数组名会自动隐式转换为指向数组第一个元素的指针(即int*类型),这就是常说的“数组退化为指针”。
  • 函数形参里的[5]只是写法上的保留,没有实际的数组长度约束作用——就算你写成int myNumbers[],效果也完全一样。编译器不会根据这个数字做边界检查,哪怕你传入长度非5的数组,编译器也不会报错(但运行时可能出现问题)。

因为形参实际是指针类型,和实参退化后的指针类型完全匹配,所以代码能正常运行。函数里的myNumbers[i]本质是指针偏移访问,等价于*(myNumbers + i),和数组的原生访问逻辑一致,因此能正确输出元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:32:02