Не "линкер подставляет адреса", а значение в языке C в выражение передаются по-значению, а не по ссылке или по указателю. А массивы -- по указателю, например, потому с квадратными скобками можно без амперсанда. Или в C++ можно заставить по ссылке передать (но там дальше всё равно амперсанд понадобиться).