Originariamente inviato da darth fener
Ma questo vale solo per i vettori giusto?
Se io ho una variabile int b=3; e un'altra int *a;
gli dico a=&b; poi se voglio mettere un valore nella locazione di memoria successiva ad a faccio
*(a+(1*sizeof(int)))=4;
*(a+(2*sizeof(int)))=5;
Semmai
codice:
*(a+1)=4;
*(a+2)=5;
, visto che il compilatore considera già le dimensioni della variabile.
giusto? così alla fine non mi sono realizzato indirettamente un array?
No, in questa maniera stai assegnando valori a memoria non inizializzata o riservata ad altri scopi, il che è un ottimo modo per ottenere errori strani e mandare in crash il programma.
PS: posso assegnare un indirizzo di memoria libero manualmente ad un puntatore, tipo a=0xFF....?
È una cosa che puoi scrivere e compilare, ma che probabilmente ti conduce ad un segmentation fault. Su praticamente tutte le macchine moderne non puoi accedere alla memoria come ti pare, è il sistema operativo che gestisce la memoria e la alloca su richiesta dei programmi; a questo proposito il C fornisce le funzioni malloc, calloc, realloc e free.