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

为何未指定大小的arr2无法按预期仅复制前5个数组元素?

问题原因分析

1. int arr2[] = {};的本质问题

在C语言标准中,用空初始化列表声明数组的写法是不合法的,属于未定义行为。多数编译器会将其解析为一个大小为0的数组——也就是说,这个数组在内存里没有分配任何存储空间。

2. 越界访问导致的异常结果

当你调用copyArrInt往arr2复制元素,或是后续循环访问arr2[0]到arr2[9]时,都是在访问数组边界之外的内存区域。这种数组越界访问是C语言中典型的未定义行为,程序的输出完全不可控:可能出现乱码、程序崩溃,或是看似正常但逻辑错误的结果,自然达不到你的预期。

3. 指定数组大小后正常的原因

当你写成int arr2[10] = {};时,编译器会为arr2分配能容纳10个int类型元素的内存空间。同时C语言规定,若数组初始化列表为空,所有元素会被自动初始化为0。之后调用copyArrInt复制前5个元素,arr2的前5个位置被覆盖为1-5,后5个位置保持初始的0,所以循环输出10个元素时,前5个与arr1对应元素一致,完全符合预期。

另外提个小笔误:代码里的printf("%d ", arr2[i]");多了一个双引号,属于语法错误,编译时会报错,需要修正为printf("%d ", arr2[i]);。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:53:10