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

数组循环中i/size取值异常及循环条件修改后数值来源问询

代码分析:循环未执行却输出5的原因

核心问题拆解

1. size的实际计算结果

在MISE函数中,size_t size = sizeof(*A)/sizeof((*A)[MAXSIZE-1]);的计算是正确的:

  • *A是传入的int[MAXSIZE]数组,sizeof(*A)等于MAXSIZE * sizeof(int)
  • sizeof((*A)[MAXSIZE-1])是单个int类型的大小
  • 两者相除后,size的值就是MAXSIZE(也就是255),不存在异常值。

2. 修改后的循环根本没执行

你把循环条件改成for(int i = 0; i < i/size; i++)后,循环体一次都不会运行:

  • 初始时i=0,整数除法0/size的结果是0
  • 循环条件0 < 0不成立,循环直接终止,printf语句和数组赋值操作都不会执行。

3. 输出5的真正来源

输出的5来自main函数的数组初始化:

  • #define f sizeof(255)中,255是int类型,所以sizeof(255)等于当前系统中int的大小(通常是4字节)
  • f+1的结果就是5,数组初始化语句int arr[MAXSIZE] = {(char*)(void*)(f+1)};会把arr[0]赋值为5,其余元素默认初始化为0
  • MISE函数直接返回了未被修改的数组,最后printf输出的就是arr[0]的5,和你猜测的255/51=5没有任何关系。

4. 原循环的逻辑说明

你最初的循环for(int i = 0; i < size; i++)中,i的取值范围是0到254,都小于size=255,整数除法i/size的结果始终是0,不可能取到MAXSIZE值,你之前遇到的异常应该是其他代码问题导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:20:10