Pointer Related: Array, Structure, Single Pointer (*), Double Pointer (**), Reference (&)
1-D Array: integer
int a[5] = {10,20,30,40,50};
Output
	a[0] = 10      &a[0] = 0x5FBFF8E0      a + 0 = 0x5FBFF8E0
	a[1] = 20      &a[1] = 0x5FBFF8E4      a + 1 = 0x5FBFF8E4
	a[2] = 30      &a[2] = 0x5FBFF8E8      a + 2 = 0x5FBFF8E8
	a[3] = 40      &a[3] = 0x5FBFF8EC      a + 3 = 0x5FBFF8EC
	a[4] = 50      &a[4] = 0x5FBFF8F0      a + 4 = 0x5FBFF8F0
2-D Array: integer
int a[3][2] = {10,20,30,40,50,60};
// or
int a[3][2] = { {10,20},{30,40},{50,60}};
// or
int **a; 
/*
    **a = 10, *(*a+1) = 20
    **(a+1) = 30, *(*(a+1)+1) = 40
*/
a[x][y] = *(a[x] + y) = *( *(a+x) + y )
Output
	a[0][0] = 10      a[0] + 0 = 0x5FBFF8E0   ;   a[0][1] = 20      a[0] + 1 = 0x5FBFF8E4 
	a[1][0] = 30      a[1] + 0 = 0x5FBFF8E8   ;   a[1][1] = 40      a[1] + 1 = 0x5FBFF8EC 
	a[2][0] = 50      a[2] + 0 = 0x5FBFF8F0   ;   a[2][1] = 60      a[2] + 1 = 0x5FBFF8F4 
	a[0] = 0x5FBFF8E0      a + 0 = 0x5FBFF8E0      *(a+0) = 0x5FBFF8E0
	a[1] = 0x5FBFF8E8      a + 1 = 0x5FBFF8E8      *(a+1) = 0x5FBFF8E8
	a[2] = 0x5FBFF8F0      a + 2 = 0x5FBFF8F0      *(a+2) = 0x5FBFF8F0
char * vs. char []
char ch1[] = "abcde";
printf("0x%X 0x%X \t %s\n",ch1,&ch1,ch1);
    
char *ch2 = "abcde";
printf("0x%X 0x%X \t %s\n",ch2,&ch2,ch2);
Output
	ch1(%X) = 0x5FBFF8F2   &ch1 = 0x5FBFF8F2      ch1(%s) = abcde
	ch2(%X) = 0xE37            &ch2 = 0x5FBFF8F0      ch2(%s) = abcde
Structure
struct student
{
    char firstname[20];
    char *lastname;
    int score;
};
struct student s1 = {"Carlos", "Wang", 100};
printf("%s %s = %d\n",s1.firstname,s1.lastname,s1.score);
printf("&s1 = 0x%X\n",&s1);
printf("&s1.firstname = 0x%X \t s1.firstname(%%X) = 0x%X \t s1.firstname(%%s) = %s\n",&s1.firstname,s1.firstname, s1.firstname);
printf("&s1.lastname = 0x%X \t s1.lastname(%%X) = 0x%X \t s1.lastname(%%s) = %s\n",&s1.lastname,s1.lastname, s1.lastname);
Output
	Carlos Wang = 100
	&s1 = 0x5FBFF8D0
	&s1.firstname = 0x5FBFF8D0      s1.firstname(%X) = 0x5FBFF8D0      s1.firstname(%s) = Carlos
	&s1.lastname = 0x5FBFF8E8      s1.lastname(%X) = 0xE1D      s1.lastname(%s) = Wang
 
								

