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

数组传参取值出现未知错误,请求修复代码(学习函数返回数组技术)

问题修复与解释

修复后的代码

#include <stdio.h>

// 提前声明display函数,避免隐式声明警告
void display(int m[10], int n);

int main() {
  int a[10], i;

  printf("enter 10 elements: ");
  // 修复输入循环边界:数组仅10个元素,索引范围0-9
  for (i = 0; i < 10; i++) {
    scanf("%d", &a[i]);
  }

  display(a, 10);
  return 0;
}

void display(int m[10], int n) {
  int i;
  // 修复打印循环边界:仅遍历n个有效元素
  for (i = 0; i < n; i++) {
    // 修复索引:使用i遍历每个元素,添加空格分隔输出
    printf("%d ", *(m + i));
  }
}

代码错误点修复说明

  • 输入循环越界:原代码for (i = 0; i < 11; i++)会写入数组a之外的内存(数组仅10个元素,索引0-9),触发未定义行为,改为i < 10。
  • 打印循环越界:display函数中for (i = 0; i < n + 1; i++)会访问数组外的无效元素,改为i < n。
  • 固定索引错误:原代码printf("%d", *(m + 1));始终只打印数组的第2个元素(索引1),且无分隔导致输出混乱,改为*(m + i)遍历所有元素,同时添加空格分隔。
  • 函数声明缺失:原代码中display函数在main之后定义却未提前声明,会触发隐式声明警告,添加函数声明解决。

关于返回局部变量地址的问题

你尝试返回a时编译器提示function returns address of local variable,原因是:

  • 局部变量a分配在main函数的栈帧中,当main执行完毕,栈帧会被销毁,对应的内存会被回收或重新分配。
  • 返回这个地址后,后续访问该地址指向的内存时,读取到的是已失效的随机垃圾值,属于未定义行为,因此编译器会发出警告阻止这种错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:55:48