我有两个void *
,即void *a
和void *b
。可以说a
是在0x804ae0
和b
是在0x804aec
。我如何比较两者?我想检查地址a
是否低于地址b
。如何比较两个void的地址*
回答
#include <stdint.h>
if ((uintptr_t)a < (uintptr_t)b) ...
请注意,强制转换为int
可能是与32位整数,但64位指针系统不足。
标准的运营商在void *
工作太:
if (a < b) ...
它在这种情况下定义了这些指针是如何比较的?作为有符号值还是无符号值? – dlask
@dlask有符号/无符号对指针地址没有意义,所以没有。在机器代码层面上,地址只是简单地比较,并且不存在那里存在的“已签名”。 – Lundin
@dlask指针没有符号。他们是地址。根据标准,他们甚至不必是数字(尽管我知道的所有硬件都是)。 – ArjunShankar
像任何其他变量。
if(a < b)
您可以直接比较。
int main(void)
{
int a[]={10,20};
void *p1=&a[0],*p2=&a[1];
if(p1>p2)
printf("Crazy\n");
else
printf("Correct\n");
return 0;
}
预期输出:
Correct
我已修改此答案。这是未定义的行为。 'a'和'b'不指向同一个对象或同一个数组中的两个对象。 – Persixty
- 1. 比较两个地址列
- 2. 如何比较IP地址
- 3. 如何比较c中的两个ip地址?
- 4. 如何比较x86程序集中的两个地址?
- 5. 比较地址
- 6. 比较两个网址
- 7. 比较两个网址(iPhone)
- 8. 如何在Windows中使用C++比较两个端点地址:
- 9. 我们如何比较两个地块?
- 10. Java比较地址
- 11. 比较IP地址
- 12. 如何比较指针地址值?
- 13. 你会如何比较IP地址?
- 14. 比较reference_wrappers的地址
- 15. 如何比较两个System.Types?
- 16. 如何比较两个DateTimeOffSet?
- 17. 如何比较两个表
- 18. 如何比较两个arraycollection
- 19. 如何比较两个.exes
- 20. 如何比较两个NSMutableArrays?
- 21. 如何比较两个LTL?
- 22. 如何比较两个HashSet?
- 23. 如何比较两个RippleDrawables?
- 24. 如何比较两个NSMutableArray?
- 25. 如何比较两个ID
- 26. 如何比较两个ArrayList
- 27. 如何比较两个NSIndexPaths?
- 28. 如何比较两个ImageViews?
- 29. 比较两个不是标准格式的地址
- 30. 比较WinDbg中的两个对象地址
你有没有试过* *只是比较它们? –
“我想检查a的地址是否低于b的地址” - 小心你的措辞。 *指针的地址*与指针*保存的地址之间存在*世界*差异。 – WhozCraig
“*我想检查a的地址是否低于b *的地址”:你确定你的意思是? 'a'本身就是一个指针,'b'也是。如果你只是想比较指针,你应该说“我想检查一下'a'是否低于'b'”。 – ArjunShankar