3

!varが と同じvar != NULLかどうか疑問に思っていvarますchar *

これは同じことではないことを示す非常に小さな POC です (または、私が何か間違ったことをしているのですか?) が、その理由はわかりません。

int main(void) {
    char *c = NULL;
    if(!c){
        printf("1\n");
    }else{
        printf("2\n");
    }

    if(c != NULL){
        printf("1\n");
    }else{
        printf("2\n");
    }
    return 0;
}

出力は

1
2

これをx64 Arch Linux、GCC 4.8.2で実行しています

編集: 本当の睡眠が必要か、プログラムの実際の出力を読み違えているかのどちらかです! 何度か読んでください。

!c「if cis not NULL」を意味します。これは false であるため2、最初ifに出力する必要がありますが、出力し1ます !

編集:確かに、私は少し眠る必要があります。何を考えていたのかわからない。皆さん、ありがとうございました!

4

6 に答える 6

1

(!c)(c != NULL)は相反する 2 つの条件です (一方が true の場合、もう一方は false です)。

(!c)c は NULL に初期化されているため、 " if(c == 0)" または " "と同等です。c は NULL に等しいため、"if(c!=0)" に相当するのは FALSE です。if(c == NULL)(c != NULL)

于 2013-10-29T13:32:43.890 に答える
1

!var is the same as var != NULL

!varvar == NULLではなくと同じ!=です。あなたのテストには欠陥があります。この場合、 -if(c != NULL){は と同じでif (c) {、 ではありませんif(!c){

ただし、NULLこれは忌まわしいものです-通常はマクロ定義を介して処理されるためNULL、環境ではまったく異なる意味を持つ可能性があり、コードが(意図したとおりに記述されている場合)まだ記述しているものを表示できる可能性があります.

于 2013-10-28T22:58:26.253 に答える