Se ho una cosa del genere:

codice:
char buffer[N];
int* ptr=(int*)buffer;
Tenendo conto della dimensione che ha un intero sulla mia macchina rispetto a quella dei char, posso tranquillamente iterare su ptr e assegnare dei valori, purché non vada fuori dall' array.
Ora però vengo a sapere che secondo la string aliasing rule non si può fare.Però non ho capito bene il motivo.Dice che in questo modo il compilatore non si deve preoccupare di controllare che un' area di memoria non sia stata cambiata da qualche puntatore.Però ice che l' alternativa è usare le unioni, ma se ho un' unione come questa:

codice:
typedef union
{
    char buffer[N];
    int ptr[N/sizeof(int)*sizeof(char)];
}myunion;
Anche in questo caso potrei cambiare la stessa area di memoria attraverso più membri: .buffer e .ptr .
Inoltre tutto questo farebbe inutile l' uso dei puntatori, spero veramente che sia stato io ad avere capito male la regola, perché altrimenti non avrebbe più senso usare un puntatore, li ho sempre usati così.