У мові програмування B, яка була безпосереднім попередником C, покажчики та цілі числа були вільно взаємозамінними. Система поводитиметься так, ніби вся пам'ять була гігантським масивом. Кожне ім'я змінної мала або глобальну, або відносну до стека адресу, пов’язану з нею, для кожної назви змінної єдиним, за яким слід було відслідковувати компілятор, було це глобальна чи локальна змінна та її адреса відносно першої глобальної чи локальної змінна.
З огляду на глобальну декларацію на зразок i;
[не потрібно було вказувати тип, оскільки все було цілим числом / покажчиком], компілятор буде оброблятися як: address_of_i = next_global++; memory[address_of_i] = 0;
і заява якi++
буде оброблятися як:memory[address_of_i] = memory[address_of_i]+1;
.
Декларація як arr[10];
би обробляється як address_of_arr = next_global; memory[next_global] = next_global; next_global += 10;
. Зауважте, що як тільки ця декларація була оброблена, компілятор міг негайно забути про arr
те, що це масив . Заява на зразок arr[i]=6;
обробляється як memory[memory[address_of_a] + memory[address_of_i]] = 6;
. Компілятору було б байдуже, чи будеarr
представлений масив таi
ціле число, чи навпаки. Дійсно, було б байдуже, чи були вони обома масивами чи обома цілими числами; це було б абсолютно радісно генерувати код, як описано, без огляду на те, чи може бути сприятлива поведінка.
Однією з цілей мови програмування на C було значною мірою сумісні з B. В B ім'я масиву [в термінології B] називається "вектором" ідентифікує змінну, що містить покажчик, який спочатку був призначений для вказівки на до першого елемента розподілу заданого розміру, тож якби це ім'я з’явилося у списку аргументів для функції, функція отримала б покажчик на вектор. Навіть незважаючи на те, що C додав "реальні" типи масивів, ім'я яких жорстко асоціювалося з адресою виділення, а не змінною вказівника, яка спочатку вказувала б на розподіл, маючи масиви розкладатися на покажчики, зроблені кодом, який оголосив масив типу С поводитися однаково до коду B, який оголосив вектор, а потім ніколи не змінював змінну, що містить її адресу.