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

锯齿数组赋值异常:修改test[0][0]为何影响所有子数组?

问题原因解析:为什么修改单个锯齿数组元素会影响所有子数组?

问题出在Array.Fill的使用方式上:

  • 你执行Array.Fill<double[]>(test, new double[32])时,new double[32]仅会执行一次,生成一个唯一的长度为32的double数组实例。
  • Array.Fill的作用是把这个同一个数组实例的引用,批量赋值给test数组的每一个元素。这意味着test[0]、test[1]……test[1999]指向的都是内存中同一个数组对象。

所以当你执行test[0][0] = 10时,本质是修改了这个共享数组的第0个元素,所有指向它的test子数组自然都会看到这个变化,导致所有[][0]都变成了10。

正确的写法

要让每个子数组都是独立的实例,需要循环为每个test[i]创建新数组:

double[][] test = new double[2000][];
for (int i = 0; i < test.Length; i++)
{
    test[i] = new double[32];
}
test[0][0] = 10;

这样每个test[i]都指向不同的数组实例,修改test[0][0]就只会影响第一个子数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:15:11