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),后跟一个终止字符,告诉代码数组结束的位置。
希望有帮助吗?