【发布时间】:2021-03-01 20:05:48
【问题描述】:
我们的教授给了我们以下 C 代码,用于比较两个相同大小的字符串,我不明白它是如何工作的。
int compare(char *a, char *b)
{
int *pa = (int *)a;
int *pb = (int *)b;
return *pa == *pb;
}
当我有以下两个字符串时:
char *a = "你好"; char *b = "你好";
程序输出1,没什么异常。
char *a = "直升机"; char *b = "帮助";
程序输出0。这是怎么回事?我试图打印出以下内容:
printf("%c, %c\n%d, %d\n", *a, *b, *pa, *pb);
printf("%d\n", *pa == *pb);
我明白了:
h, h
1869374824, 1886152040
0
为什么在对char指针进行类型转换并取消引用后值会发生变化?
【问题讨论】:
-
因为您的环境中的
int占用4 个字节,而char占用1 个字节? -
试试
char *a="hello"; char *b="hellp";。它只识别前 4 个字符的差异。
标签: c string pointers type-conversion