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

传递二维数组第二行给storeTables函数为何返回错误结果?

问题分析与解决方案

先拆解代码出错的核心逻辑:

参数本质与内存越界原因

函数参数int arr[][10]会被编译器自动解析为int(*arr)[10](指向长度为10的int数组的指针)。当你传递&tables[1]时,arr指向的是tables数组的第二行(tables[1])。此时在函数里访问arr[1][i],相当于从arr的地址向后偏移1个int[10]的内存块,但tables总共只有2行(索引0、1),这个偏移直接指向了数组之外的非法内存,读写操作自然会得到随机值。

保留int arr[][10]参数的两种有效解法

解法一:调整调用时的n值

传递&tables[1]时,将n设为0——因为此时arr指向的第二行,本身就是这个"子数组"的第0行:

storeTables(&tables[1], 0, 2); // arr[0][i] 对应 tables[1][i]
storeTables(tables, 0, 3);     // arr[0][i] 对应 tables[0][i]

解法二:统一传递整个二维数组

直接传递tables(它会自动退化为指向第一行的指针),通过n指定要操作的行索引,这是更直观的写法:

storeTables(tables, 1, 2); // arr[1][i] 对应 tables[1][i]
storeTables(tables, 0, 3); // arr[0][i] 对应 tables[0][i]

你尝试的其他方式无效的原因

  • &tables[0][1]是int*类型,和函数要求的int(*)[10]类型不匹配,编译器会直接报错;
  • tables + 1和&tables[1]是同一个地址,本质逻辑完全一致,调用时n用1仍会触发内存越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 23:17:29