我有兩個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