在if语句中使用时,数组旁边的感叹号是什么意思? “if(!used [i])”

时间:2013-09-11 15:50:14

标签: c arrays if-statement

我正在试图理解我教授用于教授排列的代码,我不知道if语句中的“(!used [i])”是什么意思或者是什么。这是完整的函数,if语句在for循环中。任何人都可以解释它的作用吗?

void RecursivePermute(int n, int k, int* perm, int* used) {

 int i;

 // We've filled perm already. Print the corresponding permutation.
 if (k == n) {
    for (i=0; i<n; i++)
        printf("%d ", perm[i]);
    printf("\n");
 }

 // Try each unused number in spot k.
 for (i=0; i<n; i++) {
    if (!used[i]) {           //this if statement is my question
        perm[k] = i;
        used[i] = 1;
        RecursivePermute(n, k+1, perm, used);
        used[i] = 0;
    }
 }

}

3 个答案:

答案 0 :(得分:3)

这意味着不是,因此会在if元素int时触发used[i] == 0语句,因此它也可以写为:

if (used[i] == 0) {
    ...
}

答案 1 :(得分:1)

used是一个整数数组。做

if (!used[i]) 

检查当前元素是否为0

递归函数的作用是每次打印数组然后将1放在下一个元素中,导致perm(和输出)看起来像,取决于主动权k:

00000
01000
01200
01230

。 。

答案 2 :(得分:1)

如果变量为0,则真值语句将变量视为false,如果是其他变量,则将变量视为真。 !是非运营商。因此,used [i]将执行相反的操作,如果使用[i]为零则返回true,否则返回false。