簡體   English   中英

C中的指針比較

[英]comparison of the pointers in C

當我做這樣的事情時,我有一些簡單的問題:

int* ptr1
int* ptr2

if(ptr1 == ptr2)...

我實際上比較的是什么:

1. addresses where ptr1 and ptr2 saved
2. addresses where content of pointers saved

如果有 1,我如何檢查 2?

這比較了指針值,它們是地址。

所以ptr1==ptr2測試兩個指針是否指向同一個地址——你的#2。

你可以用&ptr1 == &ptr2來表達#1——比較指針本身的地址,但在這里你知道那將是錯誤的。

您正在比較 ptr1 指向的地址是否與 ptr2 相同(並且相反)。 這意味着,您的選項 2。

您比較實際的指針。

從你的措辭中我不確定你真正想要做什么,但它可能是其中之一:

if (*ptr1 == *ptr2) ...

或者

if (&ptr1 == &ptr2) ...

要比較指針實際指向的內容,請使用:

if(*ptr1 == *ptr2)...

當你聲明

  int *ptr1;

您正在定義一個指向 integer 的變量(具有地址)。 您可以通過獲取該變量的地址(&)來獲取該變量的地址,即

&ptr1

從根本上說,ptr1 將包含 memory 位置的地址(如果 integer 指向已為此類事物分配空間的位置,則可以存儲該位置)。

比較 ptr1 和 ptr2 變量的值會告訴你它們是否指向同一個變量; 比較 ptr1 和 ptr2 變量的取消引用值將告訴您它們指向的值是否相同。

2)指針的值以及它們指向的地址。

比較指針指向的值:

  1. 檢查是否有任何指針是 NULL
  2. 找出兩個指針 NULL 在上下文中的含義
  3. if (*ptr1 == *ptr2)比較

要比較存儲指針的地址,請使用:

if ( &ptr1 == &ptr2 ) since these are the addresses of the pointers.

任何時候你使用“a==b”形式的東西,你都在比較變量a的內容和變量b的內容。 在 a 和 b 是指針的情況下,它們的內容是一些數據的地址,因此如果它們指向相同的位置,a==b 將返回 true,否則返回 false。

要比較兩個變量的地址,您需要執行 &a==&b。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM