数组循环中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,其余元素默认初始化为0MISE函数直接返回了未被修改的数组,最后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
相关产品推荐
相关产品推荐

