一个很有趣的代码,仅仅改变一个字母,就完全改变了反转了执行的任务,为什么这么说呢?
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void exchange(int* px, int* py)
{
int z;
z = *px;
*px = *py;
*py = z;
}
int main()
{
int arr[] = { 1,5,6,1,1,6,6,8,2,2,3,5,635,25,546,653,354354,63546540};
int sz = sizeof(arr) / sizeof(arr[0]);
int i, j;
for (i = 0; i < sz; i++)
{
if (arr[i] % 2)
{
for (j = i; j < sz; j++)
{
if (!(arr[j] % 2))
{
exchange(&arr[i], &arr[j]);
continue;
}
}
}
else
continue;
}
for (int w = 0; w < sz; w++)
{
printf("%d ", arr[w]);
}
return 0;
}
这个代码的目的是将一个数组的所有的偶数项放在数组的前面,将奇数项放在代码的后面
执行结果:
而如果将上述代码的红色部分改为
for (j = 0; j < sz; j++)
没错!只将‘i’改为‘0’,这个代码的执行效果就变成了将一个数组的所有的奇数项放在数组的前面,将偶数项放在代码的后面。
执行结果:
出现这一现象的原因是什么呢?
因为将‘i’改为‘0’后,每次都是将奇数与所有的偶数置换一次,而奇数与第一个偶数置换后,后面就变成了偶数与偶数置换,可以理解为效果不变,而下一个奇数会与前一个已经被置换了的偶数置换,这样之前被置换的偶数就变成了奇数,以此类推,就变成了奇数在前,偶数在后。