一维数组5个一换行是i50,而不是i150为什么

哎,上次有个朋友问我,为什么他写了个代码,数组里有5 个元素,想要每打印5 个就换行,结果打印出来变成了i5 0,而不是i1 5 0。
我当时就笑了,这其实是个挺常见的误会。

我以前在某个项目里也遇到过类似的情况。
记得那是在2 01 0年,我们团队在做一个数据分析项目,用到的是一个一维数组。
当时我们就是按照他的要求,每5 个元素打印一行,结果他看了一眼输出,愣了,怎么成了i5 0呢?我当时就解释了,主要是因为数组元素的索引和格式化输出的设置。

首先,咱们得明白数组元素的索引。
在一维数组里,元素的索引是从0开始的,不是1 所以,数组的第一个元素索引是0,第二个是1 ,依此类推。
我朋友想要每打印5 个元素就换行,这里的“5 个”是指连续的元素,而不是它们的索引值。

然后,还有格式化输出的设置。
在编程里,格式化输出就是控制数据显示的方式。
比如,在C语言里,printf函数就允许你指定格式字符串来控制数据的显示。
如果你在格式化字符串里用了%i或者类似的占位符,然后跟着一个数字(比如5 0),那其实不是指打印索引为5 0的元素,而是表示一种格式化选项。
我朋友可能误解了这一点。

还有那个宏展开的问题,他提到的宏展开例子(1 0MIN(i,j)=1 0(1 0)(1 5 )?(1 0):(1 5 );),这其实是一个混淆了宏定义、条件运算符和函数调用的表达式。
在正确的上下文中,MIN(i,j)是一个宏,用来返回i和j中的较小值。
但是,他给出的表达式语法上是有问题的,跟数组换行的问题也没关系。

所以,总结一下,一维数组5 个一换行这个问题,主要是跟数组元素的索引和格式化输出的设置有关,跟宏展开或者条件运算符没有关系。
如果你想要每5 个元素换行,就应该在循环逻辑里处理,而不是在格式化字符串里。

京ICP证03 01 7 3 号-1 京网文【2 02 3 】1 03 4 -02 9 号 ©2 02 6 Baidu
百度知道意见反馈页面。

实操提醒:直接在页面底部点击“意见反馈”提交问题。