codice:
ptr=c[3];
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;
}