2016-02-26 5 views
0

Если вы должны были объявить некоторые указатели, как это:декларация указателей

int n, *p1, *p2; 
double *p3; 

ли мы быть в состоянии определить, если p1 = p2?

Я понимаю, что весь этот код говорит нам, что * p1 и * p2 являются указателями, которые указывают на int. И что p1 и p2 будут ints.

Edit: Так это из C++ книги, и вопрос спрашивает:

Отметьте следующие утверждения как истинные (правильный) или ЛОЖЬ (неправильному):

(а) p1 = p2;

+0

p1 и p2 не являются int, они имеют одинаковую память как int, но они содержат адрес, в котором может быть сохранен int –

+0

p1 = p2 всегда истинно. – sashang

+1

@sashang не всегда –

ответ

0

Да, просто напишите p1 == p2, чтобы определить, если p1 = p2.

p1 и p2 не будет ints. Они являются указателями, хотя он может быть реализован как целые числа в некоторых средах.

0

p1 и p2 не являются буквально целыми числами. Они указывают/содержат адрес местоположения в памяти, который может содержать целое число.

3

p1 и p2 являются указателями на ints. *p1 и *p2 при использовании в коде получит значение, на которое указывают p1 и p2. Вы можете проверить, одинаковы ли указатели, используя p1 == p2, и посмотреть, соответствуют ли значения, на которые они указывают, с помощью *p1 == *p2.

0

Если p1 == p2, то это также верно, что * p1 == * p2

+0

Второй оператор может быть неопределенным поведением (например, если оба являются нулевыми указателями) –

+0

Нет, это все еще так. – nicomp

+1

Неопределенное поведение не является ни истинным, ни ложным –

0

вы получили это наоборот.

int *p1, *p2; 

p1 и p2 являются указателями и * p1 и p2 * были бы целые

теперь говорят

*p1 = 35; 
*p2 = 35; 

значения в ячейки памяти p1 и p2 равны. p1 не обязательно должен быть равен p2.

С другой стороны

int *p1 = 0, *p2=0; 
int a = 75; 
p1 = &a; 
p2 = p1; 

Теперь оба p1 и p2 содержат адрес a так p1 равно p2;

Смежные вопросы