我想比較一個數字和一個地址。 這是代碼。錯誤C2446:'==':沒有從'int *'轉換爲'int'
#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: '==':沒有從 '詮釋*' 轉換爲 '廉政'
我做了一些研究,我有兩個hypothesises:
也許是因爲不同的數據類型無法比較。
但我試圖比較float的數據類型與char,並且代碼compielred正確。
- 我學會了MSDN的編譯器錯誤c2446。翻譯是「編譯器無法將type1轉換爲type2」
我的假設是,當執行關係操作時,編譯器需要將type1轉換爲type2。但'int *'到'int'的轉換沒有意義。 我的問題:這個假設是否正確?如果不是,那爲什麼會發生?
編譯器的信息:VC 6.0從https://www.microsoft.com
首先,如果你想打印一個指針,你應該使用''%p''格式,它必須是一個'void *'(需要一個明確的轉換)。閱讀例如[這個'printf'(和家庭)參考](http://en.cppreference.com/w/c/io/fprintf)瞭解更多信息。 –
您的代碼調用未定義的行爲。要打印一個指針,使用'%p',它需要'void *'。 – Olaf
至於錯誤,應該很清楚:你有兩個你想要比較的不兼容類型的值。 –