>Но нельзя прибавить/отнять/итд.
В мире, где под благодатным светом Ричи живут богоподобные программисты на С, null можно и прибавлять, и отнимать, и делать с ним все, что угодно, ведь это просто указатель на 0х0.
Пустого указателя - это как? Это неинициализированного? Пустым он быть не может, он - слово. Если я раизменую неинициализированный указатель, чтобы добавить его содержимое куда-то, ничего страшного не может случиться. Либо он ссылается на выделенный программе и действительный адрес и я добавляю куда-то его содержимое, либо нет и я получаю сегфолт. Ничего непредсказуемого, кроме самого неинициализированного указателя. Зачем это делать - другой вопрос.
В любом случае, я даже не говорил о содержимом. В мире С любой указатель - это машинное слово, и ни чем не хуже любого другого машинного слова. Даже null. Конечно, можно специально стрелять себе в ногу, но адекватный человек обычно ожидает, что если он направит пистолет себе в ступню и нажмет спуск, то ничего хорошего не произойдет. А эти ваши "нельзя прибавить/отнять/итд" - это такой большой собачий конус-воротник, напяленный на руку, позволяющий носить пистолеты даже тем, кто не способен на тянуть за спуск, когда ствол направлен ему в ногу. Ну, кроме случаев со всякими языками вроде жабы, там подобное обусловлено в первую очередь абстракцией от железа и делается ради дополнительных ништяков, вроде запуска одного байт-кода на всех моделях кофеварок с разными разрядностями.
Всё было бы хорошо, если бы сишка ни была моим первым "настоящим " языком и чтобы за попытки не резервировать или не заполнять адресс меня компилятор рукоятью пистолета по колену не лупил.
Однако, мой GCC меня ничем никуда не лупит. Нижайше реквестирую коротенький и наглядный код, название компилятора и флаги компиляции, за которые ты огребл(а) по колену. Может узнаю заодно, что такое "заполнять адрес".
Это когда ты не просто создал адресс с именем, но и выделил место с последующим залитием туда переменной. Dev c++ bloodshed. Код я думаю ты и сам настрочмть можешь, раз уж такой премудрый проггер, благо всего-то две строчки.
Это очень приземленный стереотип от якобы программистов.
Множество "обычных" значений + null (в его наиболее распространенном понимании) - это sum type. Т.е. хранимое значение может быть из двух или более доменов. В языках без статической типизации (js, python, perl, ruby, etc.) это деление бессмысленно, в них все переменные типа sum(все домены). null это просто единственное значение из null-домена, такое же как и все остальные.
Большинство аналогий ниже/выше по треду некорректны, как и всегда.
Это в каком языке так массивы устроены? Аналогию с null нужно обыгрывать или с отсутствием листа или с отсутствием на нём линовки. Клетки с невписанным значением - предмет для шуток аля "Буратино дали три яблока. Два он съел.", но никаких null там нет.
Почему нет? Массив создан, но не инициализирован. Память выделена, но не заполнена. Поскольку у разных ЗУ могут быть по-разному заполнены неиспользуемые области памяти, во избежание неполадок при обращении к неинициализированной памяти кидается ошибка. В некоторых языках память инициализируется автоматически.
И из этого следует что null будет только если компилятор автоматически инициализирует элементы массива null'ами. В ином случае будут ссылки неизвестно куда.
В большинстве случаев один и тот же объект не может быть и нулём и null. В хороших примерах 0 пельменей и нет пакета. 0 бумаги и нет втулки. Если в одной из клеток ноль, то и в других тоже должно быть числа, а не ссылки.
На скриншоте: нижняя строка используется для добавления в таблицу новых записей (новой строки, в данном случае шестой по счету), надо тупо заполнить нужные ячейки и нажать Enter.
как видишь, пока поля (ячейки) не заполнены значениями, в них везде изначально стоит NULL.
в SQL даже для boolean ячеек может стоять значение NULL.
Да, и не обязательно у каждой строки должны быть заполнены абсолютно все ячейки, можно оставить в них NULL.
хоспаде.... друг.... ты аматор? Есть разные цели и платформы. Это норма. Ты везде линух будешь пихать? Дава вот не будем. Линух это хорошо но это не панацея.
1. на всех держателях появляется пустая втулка
2. бумагу берешь в левую руку, а подтираешься правой
3. можешь подтереться нужной рукой при хорошем гороскопе
Строго говоря, это не совсем так.
NULL имеет тип и попытка написать что-то типа: long int i=NULL выдаст варнинг:
initialization makes integer from pointer without a cast
В современной сишке он "обосрался", но до C89 кажется определяли где как, бардак был тот еще. В крестах кстати возникает непонятка при оверлодах f(int) f(T *), потому и ввели nullptr, а за NULL теперь могут обоссать.
О, я знаю один язык, в котором помимо 0 и null есть еще undefined.
Тогда в нем 0 - это рулон закончился, null - это нет рулона, а undefined - это когда нет самого понятия "рулон".
В js такое работает потому что при таком сравнении используется приведение типов. Сравнение:
null === undefined // false
null == undefined // true
null === null // true
undefined означает, что переменная не объявлена или ей не присвоено никакого значения. null может быть присвоен переменной и означает, что у переменной нет значения.
Ответь.
Оторви.
1
г
3
4
5
6 7
D~rmnri- Геоман Греф может говорить слово «Agile» 7 раз в секунду,
Стйв°Балмер может выкрики ват ь «Ье ve\opers!» Ираз в секунду.
£тив««нили наладить обмен информацией между собой, передавая 0н^^мСИп побитово: молчание означает е, а слово - 1;
и^Ем2п?ься реш
- Слушай, ты разработчик. Ответь, почему разработчики всегда неправильно оценивают время на создание программ?
- Представь что тебе надо разгрузить машину, сколько времени это займет?
- Пару часов
- Это камаз
- 8 часов
- Камаз, груженый песком -12 часов
- У тебя нет лопаты и инструментов, тол
15 Sorting Algorithms in 6 Minutes,Science & Technology,Algorithms,Sorting Algorithms,Sorting,Visualization and "audibilization" of 15 Sorting Algorithms in 6 Minutes.
Sorts random shuffles of integers, with both speed and the number of items adapted to each algorithm's complexity.
The algorithms
Отличный комментарий!