сравнение указателей в C - PullRequest
0 голосов
/ 14 июня 2011

У меня есть простой вопрос, когда я делаю что-то подобное:

int* ptr1
int* ptr2

if(ptr1 == ptr2)...

Что я на самом деле сравниваю:

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

Если есть 1, как я могу проверить 2?

Ответы [ 8 ]

5 голосов
/ 14 июня 2011

Сравнивает значения указателя, которые являются адресами.

Итак, ptr1==ptr2 проверяет, указывают ли два указателя на один и тот же адрес - ваш # 2.

Вы можете выразить # 1- сравнивая адреса самих указателей - с &ptr1 == &ptr2, но здесь вы знаете, что это будет неверно.

2 голосов
/ 14 июня 2011

Вы сравниваете, указывает ли ptr1 на тот же адрес, что и ptr2 (и наоборот).Это означает, что ваш вариант 2.

0 голосов
/ 14 июня 2011

Каждый раз, когда вы используете что-то в форме "a == b", вы сравниваете содержимое переменной a с содержимым переменной b.В случае, когда a и b являются указателями, их содержимое является адресом некоторых данных, поэтому a == b вернет true, если они указывают на одно и то же местоположение, и false в противном случае.

Для сравнения адресов двух переменныхвам нужно сделать & a == & b.

0 голосов
/ 14 июня 2011

Для сравнения значений, на которые указывают указатели:

  1. проверить, являются ли какие-либо из указателей NULL
  2. Выясните, что означают оба указателя как NULL в контексте
  3. сравнить с if (*ptr1 == *ptr2)

Для сравнения адресов, где хранятся указатели, используйте:

if ( &ptr1 == &ptr2 ) since these are the addresses of the pointers.
0 голосов
/ 14 июня 2011

2) значения указателей и, следовательно, адреса, на которые они указывают.

0 голосов
/ 14 июня 2011

Когда вы объявляете

  int *ptr1;

вы определяете переменную (которая имеет адрес), которая указывает на целое число. Вы можете получить адрес этой переменной, взяв адрес (&) этой переменной, то есть

&ptr1

принципиально, ptr1 будет содержать адрес ячейки памяти (где может храниться целое число, если оно указывает на местоположение, где для такой вещи выделено место).

Сравнение значений переменных ptr1 и ptr2 покажет вам, указывают ли они на одну и ту же переменную; Сравнение разыменованных значений переменных ptr1 и ptr2 покажет вам, совпадают ли значения, на которые они указывают,

0 голосов
/ 14 июня 2011

Чтобы сравнить, на что действительно указывают указатели, используйте:

if(*ptr1 == *ptr2)...
0 голосов
/ 14 июня 2011

Вы сравниваете фактические указатели.

Я не уверен из вашей фразы, что вы на самом деле хотите сделать, но это, вероятно, один из:

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

или

if (&ptr1 == &ptr2) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...