【发布时间】:2015-02-12 14:15:01
【问题描述】:
只是编写了一些代码来使用冒泡排序对数组进行排序,但一开始我什至无法定义一个数组并打印它。
代码:
#include <stdio.h>
int main () {
int test[] = {9,9,9,9,9}; //define array
test[2] = 3;
bool checker = false; //is it sorted?
int i = 0;
for(int i = 0; i<=4; i++) //set random numbers for array
{
int g;
g = 4+i;
test[i] = g;
i++;
}
for (int i = 0; i <= 4; ++i ) //print array as normal
{
printf(", ", test[i]);
}
执行时总是输出:
, , , ,
所以数组是空的?还是我打印错了?还是什么?
【问题讨论】:
-
您使用
i++递增两次 - 一次在 for 语句中,一次在正文中。这很糟糕...... -
顺便说一句。像这样编写 for 循环是一个好习惯:
for (int i = 0; i < 5; ++i)注意数字 5 而不是 4,这样您就可以立即看到元素的数量,并且您不必在脑海中减去 1,并且总是更喜欢预增量++i(和其他前缀运算符)超过 postincrementi++(或其他后缀运算符)。原因是性能 - 在某些情况下,postfix 会导致创建临时副本。 -
数组不能为空——它总是包含相同数量的东西。您的问题主要是因为在使用之前没有弄清楚
printf的工作原理。 -
@V.K.性能不是任何基本类型(如
int)的原因,而仅适用于用户定义的类型(在某些情况下)。++i、i++、i += 1都将创建相同的代码,至少在启用优化后。坚持使用其中一种是很好的风格,因为它可以对用户定义的类型产生影响,所以应该坚持++i。