2011-05-04 47 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