【发布时间】:2017-04-14 01:35:40
【问题描述】:
我想比较一个数字和一个地址。 这是代码。
#include "stdio.h"
int main (void) {
int a = 1;
printf("%#x\n", &a); // The address of a is 0x18ff44
int b = 0x18ff44;
if (b == &a) { //error
printf("no\n");
}
return 0;
}
我想知道是否可以将数字与地址进行比较。
错误:错误 C2446:'==':没有从 'int *' 到 'int' 的转换
我做了一些研究,我有两个假设:
-
可能是因为不同的数据类型无法比较。
但我尝试将float的数据类型与char进行比较,代码编译正确。
- 我了解到 MSDN 的编译器错误 c2446。翻译为“编译器无法将 type1 转换为 type2。”
我的假设是,在执行关系操作时,编译器需要将 type1 转换为 type2。但是 'int *' 到 'int' 的转换没有意义。 我的问题:这个假设正确吗?如果不是,为什么会发生这种情况?
编译器信息:从https://www.microsoft.com下载的VC 6.0
【问题讨论】:
-
首先如果你想打印一个指针,你应该使用
"%p"格式,并且它必须是void *(需要显式转换)。阅读例如thisprintf(and family) reference 了解更多信息。 -
您的代码调用了未定义的行为。要打印指针,请使用
%p,它需要void *。 -
至于错误,应该很清楚了:你有两个不兼容类型的值要比较。
-
@Someprogrammerdude 这是 Visual C 6.0。如果它完全符合 C89 那就太神奇了,更不用说符合现代 C 标准了。