为什么两个C语言GenerateMatrix函数实现的输出结果存在差异?
两段代码输出结果不同的根因
第一段错误代码存在两个致命问题,直接导致输出异常:
- 变量
i声明后未初始化
代码里仅写了int i,k=0;,仅给k赋值为0,i没有设置初始值,会取到内存中的随机垃圾值,外层while (i<rows)的循环条件判断完全不可控,要么不进入循环,要么循环次数远超rows限制,触发数组越界访问。 - 内层循环自增语句写法错误
j,k++;是错误的写法,C/C++中逗号运算符会按从左到右顺序执行操作数,最终返回最后一个操作数的结果,因此该语句等价于仅执行k++,j的值永远保持初始的0,内层while (j<cols)永远为真进入死循环,k会持续自增导致ran[k]访问越界,读取到ran数组外的内存垃圾值,就是你看到的不在预期范围内的奇怪随机数。
第二段正确代码用for循环分别对i、j做了初始化和每次循环的自增操作,k也仅在内层循环每执行一次才自增1,不会出现越界问题,因此输出正常。
内容的提问来源于stack exchange,提问作者drew
相关产品推荐
相关产品推荐

