2011-05-04 123 views

回答

1

利瑪竇打我給它。他的回答是正確的。不幸的是,我不能直接對他的帖子發表評論(我可能太新了),但我想確認他的迴應,因爲迄今爲止的大多數答案都是不正確的。

問題中的數據類型是一個字節數組。

不要使用等號運算符(==)來比較兩個數組的值,如果您將相同的數組與自己的進行比較,它只會計算爲真。即使字節數組的每個元素具有相同的值,但是它們是不同的數組(因此它們駐留在內存中的不同位置),等於運算符將返回false。

實質上,數組只是內存中的一個指針。這裏有兩種方法來聲明數組:

int * pointer = new int[5]; 

或:

int array[] = new int[5]; 

您可以訪問的第一個元素之一:

*pointer = 100; // Dereference the pointer to get the int at that location 

或:

​​

你甚至可以這樣做:

*array = 100; 

或:

pointer[0] = 100; 

這應該證明的「數組」僅僅是一個指針,指向鄰接存儲器的塊的第一個元素。因此,當使用等號運算符將兩個數組與彼此進行比較時,這與將兩個指針與彼此進行比較是相同的。要重新說明主要觀點,如果數組不在同一個空間內,指針指向不同的地方,因此至少在等式運算符方面不是「相等的」。

我希望這是適合您的技能水平的適當信息:)如果不是,也許它會幫助其他人。另外,自從我有使用C++的樂趣以來,這已經有一段時間了,所以希望一切都是正確的。

+0

是的,這是有道理的。那麼它是比較這種情況下的地址? – 2011-05-05 00:25:51

+0

如果您要使用等號運算符(==)比較兩個數組,您只需比較它們的地址,是的。數組只是指針周圍的簡便語法,指針的值指向內存中的地址,並使用「==」比較值。 :) – arichards 2011-05-05 00:46:33

+4

數組**不是指針**。它們是完全獨立的類型,語義非常不同。然而,數組的「名稱」在C中的大多數上下文中「衰減」爲指向它的第一個元素的指針。 – 2011-05-05 04:08:23

3

比較?只需使用普通的平等和/或關係比較運算符。這種方法有什麼問題嗎?你爲什麼突然想要比較內存?

+0

看到arichards回答... – 2011-05-05 00:22:03

+0

@Tommy:這個問題明確指出你想比較兩個無符號的字符。然後,事實證明,你想比較兩個數組。當你真的想要比較兩個數組時,你爲什麼要比較兩個無符號字符? – AnT 2011-05-05 00:34:46

6

小心:的PhysicalAddress的定義,如文檔中說明的那樣,是

BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]; 

即它是一個陣列的​​小號。不過,你可以很容易地從memcmp<string.h>(或<cstring>如果您正在使用C++)對它們進行比較:

// The two structures 
IP_ADAPTER_ADDRESSES iaa1, iaa2; 
// The result of the comparison 
int result; 

//... 

if(iaa1.PhysicalAddressLength!=iaa2.PhysicalAddressLength) 
{ 
    // We have two physical addresses of two different lengths; depending on what 
    // you want to do it may be an error or just a simpler case of comparison 
} 
else 
{ 
    // Perform the comparison 
    result = memcmp(iaa1.PhysicalAddress, iaa2.PhysicalAddress, iaa1.PhysicalAddressLength); 
} 
+0

Soudns不錯,我不趕上大小檢查評論「這可能是一個錯誤或只是一個比較簡單的情況下」....你可以擴大這個請..謝謝你 – 2011-05-05 00:20:52

+0

根據你的目標編碼不同長度地址的比較可能沒有意義(因爲您正在比較不同類型的地址),或者可能是優化(如果其中一個較短,則不必比較其內容,但您已經知道它們不同) 。 – 2011-05-05 05:34:45