我正在做一个关于C中插入排序的教程,我很难理解它的方式!运算符用作do while循环的条件。
条件只是while (!done)
,但我不明白它是如何知道 不应该等于已完成的变量。像while (done==0)
这样的东西对我来说更有意义。
我只是开始编码,如果答案非常明显,那就很抱歉!我试过谷歌搜索但我发现很难表达问题......
代码如下:
void insertionSortArray (int arr[])
{
for(int i = 1; i < SIZE; i++)
{
int value = arr[i];
int j = i -1;
int done = 0;
do
{
if (arr[j]>value)
{
arr [j+1] = arr[j];
j - -;
if (j<0)
done = 1;
}
else
done = 1;
} while (!done);
arr [j+1] = value;
}
}
谢谢!
答案 0 :(得分:6)
他们完全是一回事。 !done
和done == 0
可以互换。关于C的事情是:它很长时间没有&#34; true&#34; 布尔类型。布尔人只在C99中被引入。
所有零值都被视为false,其他值为true。这就是为什么!done
为真的原因,只要done == 0
(done
为0 - &gt; false,!false
- &gt; true
) 。 !
一如既往地是逻辑 NOT 运算符,并执行它所做的事情:否定之后发生的任何事情。因此done = 0
=&gt; done
为假,!done
- &gt;与假相反,是真实的。
如果您发现done == 0
更容易阅读,那么一定要这样写。虽然,更常见的是看到更短的版本。
非常常见的错误/真实检查:
type *foo = malloc(123 * sizeof *foo);
if (!foo)
exit(1); // failed to alloc memory
void my_function(int *ptr, size_t size)
{
if (!ptr)
return; // a NULL pointer was passed
// ...
}
因为两个陈述都是可以互换的,所以写下你认为最有意义的东西。或许大声朗读这两个陈述(虽然看起来很愚蠢)会让你改变主意:
while done equals zero
//vs
while not done
现在两句话中哪一句最有意义?