U prevodu, scanf prima
adresu gde će smestiti podatke...
Dal ćeš koristiti operator referenciranja (&) ili ćeš proslediti direktno pokazivač (što je opet adresa u memoriji) je apsolutno svejedno, dok god scanf dobije adresu.
Problem nastaje ako imaš int n = 5; (obično neki junk ili 0, al nek bude 5).
scanf("%d", n); je validan poziv i neće se buniti kompajler.
Zašto?
Jer je pokazivač u principu celobrojna vrednost sa brojem "ćelije" u memoriji. I taj poziv će na memorijsku lokaciju br 5 da upiše šta god pročita. Problem je jer će se desiti nedefinisano ponašanje, možda pukne, usled neuspešnog upisa a možda upiše 5icu tamo gde ne bi trebao. Uglavnom sevne segmentation ali nije nemoguće da ti prođe i napravi kuršlus kasnije.
Stim što kada koristiš pokazivače, pazi dobro šta radiš, priroda im je takva da mogu da ti proizvedu ogromnu glavobolju vrlo lagano