Возвращается к почти началу C (если не к самому началу).Если вы посмотрите на стр. 21 справочного руководства за январь 1974 г. C , это более или менее прямо указано в некотором примере кода:
/* is pointer null? */
if (p == 0) {
Возвращаясь еще немного дальше к ки.1972-73 Компилятор PDP-11/20 , мы находим:
match(tree, table, nreg)
int tree[], table[]; {
extern opdope[], dcalc, notcompat;
int op, d1, d2, t1, t2, p1[], p2[];
char mp[];
if (tree==0)
return(0);
op = *tree;
По крайней мере, если я правильно читаю, строка if (tree==0)
проверяет, что tree
не являетсянулевой указатель, прежде чем пытаться разыменовать его.
К сожалению, Деннис говорит , что он не может быть гораздо увереннее в дате, чем "1972-73".
Нетмного истории C до этого.Тем не менее, похоже, что в истории 0 считается нулевым указателем.Мне кажется, что использование 0 в качестве нулевого указателя - это то, что C «унаследовал» от Unix.Запись для exec
в ноябрь 1971 г. 1 st Edition Руководство программиста Unix показывает указатель со значением 0, указывающий конец списка аргументов.Согласно описанию Денниса , в этот момент "C еще впереди".
На основании всего этого я бы предположил, что C рассматривал 0 как нулевой указатель с самогоначало, или, по крайней мере, так рано, что, вероятно, больше нет записей о версии языка, которая была бы другой.
Я не был настолько успешен в отслеживании документации о первой точке, когданулевой указатель мог иметь ненулевые биты.С точки зрения языка , никогда не имеет значения.Я подозреваю, что это произошло довольно рано, но найти документацию для поддержки было бы сложно.Один из самых ранних портов C был для мейнфреймов IBM System / 360 , и хотя я не могу найти прямую документацию по этому поводу, моя догадка была бы тем внутренним значением нулевого указателя, которое использовалосьна этих машинах было наверное ненулевое.У меня нет точного числа, но я знаю, что PL / I на этих машинах использовал ненулевое значение для его эквивалента нулевого указателя;Я бы предположил , что когда они портировали C на эти машины, они , вероятно, использовали одно и то же значение.