Primo errore: c è dichiarato come matrice di 1X3 ma ricorda che gli indici partono da 0 quindi con se tenti di acedere con l'indice 3 vai fuori range dell'array.
Secondo errore: per il compilatore non è ovvio come è per l'uomo che se l'array ha una sola riga deve andare a pescare automaticamente la terza colonna; in questo caso al puntatore viene assegnato l'indirizzo della terza riga (in quanto non specifichi la colonna) dell'array che ovviamente punta a una locazione ben diversa da quella di c[0][2].
codice:
printf("%d", ptr[1][1].a);
Primo errore: ptr è un puntatore a UNA struttura di tipo Esempio non ad un array quindi l'accesso attraverso l'operatore[] non ha senso
Secondo errore: devi dereferenziare il puntatore prima di stamparlo altrimenti stampi il valore del puntatore non il valore puntato.
Il tutto modificato dovrebbe avere un aspetto simile
codice:
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv)
{
struct esempio{
int a;
int b;
};
typedef esempio Esempio;
Esempio c[1][3]={1,2,5,6,10,11};
printf("Indirizzo di c[0][2] in hex: %X\n\n", &c[0][2]);
printf("Valore del membro a di c[0][2]: %d\n\n", c[0][2].a);
Esempio *ptr;
ptr=&c[0][2]; //Assegno al puntatore il riferimento a c[0][2]
printf("Indirizzo di ptr in hex: %X\n\n",ptr);
printf("Valore puntato da prt: %d\n", (*ptr).a);
//metodo alternativo di dereferenziamento con operatore ->
//printf("Valore puntato da prt: %d\n", ptr->a);
system("pause");
return 0;
}