C Pointer

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

1D_Array

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

2D_Array

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

char array

 

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

 

 

Leave a Reply