C将char与“\ n”警告进行比较:指针和整数之间的比较

我有以下C代码部分:

char c; int n = 0; while ( (c = getchar()) != EOF ){ if (c == "\n"){ n++; } } 

在编译期间,编译器告诉我

 warning: comparison between pointer and integer [enabled by default] 

问题是,如果用’\ n’替换“\ n”,根本就没有警告任何人都可以解释原因。 另一个奇怪的事情是我根本不使用指针。

我知道以下问题

  • 警告:c中指针与整数[默认启用]之间的比较
  • 警告:C中指针和整数之间的比较

但在我看来,他们与我的问题无关

PS。 如果不是char c; 会有int c; 还会有警告

\n'被称为字符文字,是标量整数类型。

"\n"被称为字符串文字,是一种数组类型。 请注意,数组会衰减为指针,因此这就是您收到该错误的原因。

这可能有助于您理解:

  // analogous to using '\n' char c; int n = 0; while ( (c = getchar()) != EOF ){ int comparison_value = 10; // 10 is \n in ascii encoding if (c == comparison_value){ n++; } } // analogous to using "\n" char c; int n = 0; while ( (c = getchar()) != EOF ){ int comparison_value[1] = {10}; // 10 is \n in ascii encoding if (c == comparison_value){ // error n++; } } 

基本上’\ n’是一个计算为char的文字表达式。 “\ n”是一个计算为指针的文字表达式。 因此,通过使用此表达式,您实际上正在使用指针。

有问题的指针指向一个内存区域,该区域包含一个字符数组(在本例中为\ n),后跟一个终止字符,告诉代码数组结束的位置。

希望有帮助吗?