Niz je u C-u konstantan pokazivač kome se pre početka izvršavanja programa dodeljuje vrednost. Ta vrednost je adresa memorijskog bloka koji je rezervisan takođe pre početka izvršavanja programa. On je konstantan u smislu da se ne može u programu javiti sa leve strane operatora dodele. Dakle, nije moguće nešto poput
int a[3], b[3];
a=b;
Njegova se adresa tokom izvršavanja ne menja. To treba tumačiti u smislu da je ta pretpostavka dobra kada treba utvrditi šta je rezultat izvršavanja nekog programa. Operativni sistem i kompajler mogu da vrše samo one intervencije koje neće promeniti rezultat izvršavanja programa.
Sa druge strane, niz ima i neka svojstva promenljivih (u ovom slučaju pokazivačkih). Kao i promenljive, on zauzima mesto u memoriji i ima svoju adresu. Dakle, ako je x definisan kao niz, onda možemo pisati i nešto poput &x, mada to nije ni najmanje preporučljivo. Štaviše, takva konstrukcija praktično uvek znači da negde grešiš.
Ukoliko argument funkcije treba da bude niz x pri funkcija eventualno treba da menje članove tog niza x[0],x[1],... , a ne i samu adresu x (recimo da oslobađa zauzet prostor na koji x pokazuje ili da menja veličinu tog prosora), onda vrši prenos niza po vrednosti, a inače po adresi. Znači, ako treba samo da sortiraš niz, onda ćeš samo menjati članove tog niza, pa prenosiš niz po vrednosti. Ali ako pišeš funkciju koja treba da oslobodi prostor na koji pokazuje neki pokazivač i da mu dodeli vrednost NULL, onda prenosiš pokazivač na taj pokazivač.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.