我不会说这段代码在任何一种语言中都是好的。
'a'
是一个单个字符。它实际上是一个小整数,其值为该机器字符集(几乎总是ASCII)中给定字符的值。因此,
'a'
的值为97,您可以通过运行以下命令查看:
char c = 'a';
printf("%d\n", c);
"a"
,另一方面是一个字符串。它是由字符数组组成的,以空字符结尾。在C中,数组几乎总是通过指向它们的第一个元素的指针来引用,因此在这种情况下,字符串常量"a"
就像指向由'a'
和终止符'\0'
组成的两个字符的数组的指针。您可以通过运行以下命令来查看:
char *str = "a";
printf("%d %d\n", str[0], str[1]);
这将打印。
97 0
现在,我们不知道编译器会选择将字符串放在内存的哪个位置,因此我们不知道指针的值是什么,但可以肯定的是它永远不会等于97。因此,比较
if(ch=="a")
将始终为false。
当你需要比较一个字符和一个字符串时,你有两个选择。你可以将字符与字符串的第一个字符进行比较:
if(c == str[0])
printf("they are equal\n");
else printf("confusion\n");
或者你可以将字符构建为一个字符串,并进行比较。在C语言中,可能会像这样:
char tmpstr[2];
tmpstr[0] = c;
tmpstr[1] = '\0';
if(strcmp(tmpstr, str) == 0)
printf("they are equal\n");
else printf("confusion\n");
这是关于C语言的答案。在C++中有一种不同、更强大的字符串类型,因此在那种语言中情况会有所不同。