C: 与NULL的比较

28

不考虑宗教论据:

  • 选项一:

    if (pointer[i] == NULL) ...
    
    if (!pointer[i]) ...  
    

在C语言中,选项1和选项2在功能上是等价的吗?

由于没有比较操作,后者是否更快地解析?


6
假设“指针”实际上是一个指针数组,这样安全吗?如果您去掉“[i]”,可能会使问题更清晰。 - Steve Melnikoff
Sudo,你需要冷静一点。你因为一个诚实的回答而对jalf大喊大叫。你甚至问“这些是否具有相同的性能”或者“它们是否相同”,这表明你需要开放自己的思维,不要假设一切都是攻击。 - GManNickG
11个回答

-2
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{   
  char pointer[5];  
  /* This is insense you are comparing a pointer to a value */   
  if(pointer[0] == NULL) {     
    exit(1);
  } 
  ...
}

=>           ...    
  movzbl    9(%ebp), %eax  # your code compares a 1 byte value to a signed 4 bytes one 
  movsbl    %al,%eax        # Will result in sign extension...
  testl  %eax, %eax      
              ...

注意,如果没有警告,请使用-Wall标志编译。不过,你应该始终编译为优化的gcc代码。 顺便说一下,在变量前加上volatile关键字,以避免gcc忽略它...

始终提及你的编译器版本 :)


1
在原问题中,“pointer”显然是指针数组,而不是字符。 - anon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接