2017-02-08 23 views
0

Почему адрес значения NULL pointer different У меня есть пример программы ниже. Я пытаюсь понять концепцию NULL-указателей. здесь & q печатает другой адрес и 'q' дает 0, в чем причина этого.NULL POINTER в C++

#include <iostream> 
using namespace std; 
int main() 
{ 

int *q=NULL; 

cout <<"adress of pointer q\n" << q<<endl; 
cout <<"adress with apersand pointer q\n" << &q<<endl; 

} 

ответ

1

Указатель NULL является константой со значением нуля, определенным в нескольких стандартных библиотеках, включая iostream.

В большинстве операционных систем программам не разрешается обращаться к памяти по адресу 0, поскольку эта память зарезервирована операционной системой. Однако адрес памяти 0 имеет особое значение; он сигнализирует, что указатель не предназначен для указания на доступную ячейку памяти. Но по соглашению, если указатель содержит нулевое (нулевое) значение, предполагается, что он ничего не указывает.

Ссылки не указатели.

Ссылка должна быть инициализирована для ссылки на действительный объект или . [Замечание: в частности, нулевая ссылка не может существовать в хорошо определенной программе , поскольку единственным способом создания такой ссылки было бы привязать ее к «объекту», полученному путем разыменования нулевого указателя , что вызывает неопределенные поведение. Как описано в 9.6, ссылка не может быть привязана непосредственно к битовому полю. ]

Null указатель, конечно, не указывает на «действительный объект или функцию», и в комитете по стандартизации нет желания вводить нулевые ссылки.

+0

В чем причина & q и q не одинаково? если addres было 0, то почему с & я получаю адрес memeory. – Step

+0

выше, я объясняю, почему nullpointer q печатает значение 0. Адрес не равен нулю, поэтому & q печатает местоположение памяти. – Aryan

0

Вы инициализировали q с помощью NULL, поэтому q дает 0. Однако переменная q хранится где-то, то есть адрес & q дает.

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

  • Нет связанных вопросов^_^