какое значение пустой указатель действительно имеет?

Разработчик GWT очень хорош и допускает быструю разработку веб-сайтов GWT. ( http://www.instantiations.com/gwtdesigner/ )

8
задан Gordon Gustafson 14 August 2009 в 16:34
поделиться

8 ответов

Ответ состоит из двух половин:

  • значение равно нулю (т. Е. Все биты в значении равны нулю)
  • ноль никогда не считается допустимым адресом.

Второй момент - почему ответ на ваш вопрос: «Но разве это не место в памяти?» "Нет" - это просто правило, согласно которому ноль не считается допустимой ячейкой памяти. Попытка получить к нему доступ вызовет исключение.

Редактировать: Согласно Википедии (так что это должно быть правдой 8-) «некоторые архитектуры используют подписанное адресное пространство и используют самое отрицательное значение». Таким образом, оно не обязательно равно нулю для всех архитектур, но какое бы значение оно ни было в данной архитектуре, это значение считается недопустимым местом в памяти.

14
ответ дан 5 December 2019 в 04:52
поделиться

В .NET нулевые значения представлены битовой комбинацией «все нули».

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

(Я пытался найти, где это указано, и пока у меня не получается ... но это единственный имеет смысл. Я буду искать.)

8
ответ дан 5 December 2019 в 04:52
поделиться

Исходя из опыта работы с C ++, стандартное определение NULL при разговоре об указателях равно 0. Я предполагаю, что другие языки работают аналогичным образом.

7
ответ дан 5 December 2019 в 04:52
поделиться

Для ответа на C #

CLR имеет код операции для null.

   String s = "ff";

   s = null;

генерирует этот IL

  .locals init ([0] string s)
  IL_0000:  nop
  IL_0001:  ldstr      "ff"
  IL_0006:  stloc.0
  IL_0007:  ldnull
  IL_0008:  stloc.0

, как вы можете видеть, существует код операции ldnull, который обрабатывает специальное значение null

4
ответ дан 5 December 2019 в 04:52
поделиться

Не все языки используют конкретное значение, иногда null является объектом. В динамических языках часто есть глобальный объект, представляющий null, на который устанавливаются ссылки на объекты, когда они не имеют значения. В этих случаях для нулевого объекта могут быть выполнены вызовы методов и созданы соответствующие ответы.

Например, в Ruby есть синглтон с именем nil и общие методы, такие как or, nil? и to_s все имеют соответствующие реализации по умолчанию, которые можно было бы ожидать, если бы они были вызваны для нулевого объекта.

В Java null полностью указывается в спецификации виртуальной машины. Его фактическое значение на самом деле не указано, а скорее то, что должно произойти, когда инструкция байтового кода его увидит.

Null обычно "обрабатывается" установкой ссылки на объект, указывающей на объект nil.

3
ответ дан 5 December 2019 в 04:52
поделиться

Как компьютер сообщает, что ссылка содержит ноль вместо ссылки на объект?

Согласно Википедии , нулевой указатель на некоторых языках может быть фиксированный адрес в памяти, к которому пользовательские программы могут не иметь доступа, поэтому, если какой-либо объект указывает на этот адрес, он равен нулю, в противном случае - нет.

2
ответ дан 5 December 2019 в 04:52
поделиться

Первая страница ОЗУ обычно защищена от программ пользовательского пространства. Таким образом, если программист забудет проверить нулевой указатель, программа, по крайней мере, вызовет ошибку страницы, когда программа попытается получить доступ к этому местоположению.

Так что, хотя [0x00000000] , технически является реальная ячейка памяти, большинство программ не могут получить к ней доступ.

Процессоры x86 имеют там специальную таблицу, если я правильно помню.

1
ответ дан 5 December 2019 в 04:52
поделиться

http://googleit1st.com/search?hl=en&q=null+pointer

Нулевой указатель или пустая ссылка Null - это специальное значение указателя (или другой вид ссылки на объект), используемое для обозначения того, что указатель намеренно не указывает (или не ссылается) на объект. Такой указатель называется нулевым указателем. 1 Многие реализации используют значение 0 (все нулевые биты) для представления нулевого указателя, поскольку он находится в нижней части адресного пространства большинства процессоров (хотя некоторые архитектуры используют подписанное адресное пространство и используют самое отрицательное значение). Многие операционные системы генерируют исключение при попытке доступа к этому адресу памяти. Некоторые языки используют другую номенклатуру для такого указателя, например, Pascal, Ruby и Lua используют nil 2 , Visual Basic использует Nothing, а Python использует None. Фортран считает значение null не константой, а свойством, которое может быть установлено директивой NULLIFY и проверено функцией ASSOCIATED. Взято из википедии

0
ответ дан 5 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: