【发布时间】:2014-05-29 14:07:06
【问题描述】:
我正在尝试比较两个字符指针:
char * x;
char * y;
x = "Hesham";
y = "Hesham";
printf("%d %d \n", &x, &y);
if(x==y)
{
printf("=\n");
}
else
{
printf("!=\n");
}
执行结果是:
2293368 2293360
=
1 - 为什么两个指针的地址不同,== 操作返回 true ?
2 - 为什么编译器不将字符串文字 Hesham 只存储一次,并将其地址两次用于 x 和 y ?
【问题讨论】:
-
您的意思是使用
strncmp()? -
不,我不是这个意思。
-
将 printf 更改为
printf("%d %d \n", x, y);,它们应该相等。此外,您应该使用%p来打印指针。 -
约翰尼说了什么。这不是重复的。另一个问题是关于字符串的,这个问题是关于恰好是 char 指针的指针。编辑:我应该早点刷新。
-
printf("%d %d \n", &x, &y)和printf("%d %d \n", x, y)都调用未定义的行为,因为它们传递的参数类型错误,格式为%d,它需要一个类型为int的参数。你应该使用printf("%p %p", (void*)x, (void*)y)。
标签: c++ c pointers char equality