Exercise-2 : “integer pointer & array ” combinations
- Find out the size of elements in each column 
| Statement | What is this ? | &p | p | *p | p[0] | **p | *p[0] | &p[0] | p[0][0] | &p[0][0] | ***p | **p[0] | *p[0][0] | p[0][0][0] | &p[0][0][0] | 
| int p; | |||||||||||||||
| int *p; | |||||||||||||||
| int **p; | |||||||||||||||
| int ***p; | |||||||||||||||
| int p[10]; | |||||||||||||||
| int p[10][10] | |||||||||||||||
| int p[10][10][10]; | |||||||||||||||
| int *p[10]; | |||||||||||||||
| int *p[10][10]; | 
- Find out how to store and access data in elements present in below table 
| Statement | What is this ? | &p | p | *p | p[0] | **p | *p[0] | &p[0] | p[0][0] | &p[0][0] | ***p | **p[0] | *p[0][0] | p[0][0][0] | &p[0][0][0] | 
| int p; | |||||||||||||||
| int *p; | |||||||||||||||
| int **p; | |||||||||||||||
| int ***p; | |||||||||||||||
| int p[10]; | |||||||||||||||
| int p[10][10] | |||||||||||||||
| int p[10][10][10]; | |||||||||||||||
| int *p[10]; | |||||||||||||||
| int *p[10][10]; | 
- Find out the function prototypes when elements in each column are passed to a function 
| Statement | What is this ? | &p | p | *p | p[0] | **p | *p[0] | &p[0] | p[0][0] | &p[0][0] | ***p | **p[0] | *p[0][0] | p[0][0][0] | &p[0][0][0] | 
| int p; | |||||||||||||||
| int *p; | |||||||||||||||
| int **p; | |||||||||||||||
| int ***p; | |||||||||||||||
| int p[10]; | |||||||||||||||
| int p[10][10] | |||||||||||||||
| int p[10][10][10]; | |||||||||||||||
| int *p[10]; | |||||||||||||||
| int *p[10][10]; | 
- Find out elements in each column which can be changed 
| Statement | What is this ? | &p | p | *p | p[0] | **p | *p[0] | &p[0] | p[0][0] | &p[0][0] | ***p | **p[0] | *p[0][0] | p[0][0][0] | &p[0][0][0] | 
| int p; | |||||||||||||||
| int *p; | |||||||||||||||
| const int *p; | |||||||||||||||
| const int *const p; | |||||||||||||||
| int **p; | |||||||||||||||
| const int **p; | |||||||||||||||
| const int *const *p; | |||||||||||||||
| const int *const *const p; | |||||||||||||||
| int ***p; | |||||||||||||||
| const int ***p; | |||||||||||||||
| const int *const **p; | |||||||||||||||
| const int *const *const *p; | |||||||||||||||
| const int *const *const *const p; | |||||||||||||||
| int p[10]; | |||||||||||||||
| int p[10][10] | |||||||||||||||
| int p[10][10][10]; | |||||||||||||||
| int *p[10]; | |||||||||||||||
| const int *p[10]; | |||||||||||||||
| const int *const p[10]; | |||||||||||||||
| int *p[10][10]; | |||||||||||||||
| const int *p[10][10]; | |||||||||||||||
| const int *const p[10][10]; | 
- Learn post-increment, post-decrement, pre-increment, pre-decrement. Assume below set of C statements - int a[5] = {1,2,3,4,5}; int *p = &a[2]; - What will be the change in memory or value after each of the below operations ? 
| Operation | Memory address | Memory content | 
| *p | ||
| *p++ | ||
| *(p++) | ||
| (*p)++ | ||
| *++p | ||
| *(++p) | ||
| ++*p | ||
| ++(*p) | ||
| p*++ | ||
| p++* | ||
| *p-- | ||
| *(p--) | ||
| (*p)-- | ||
| *--p | ||
| *(--p) | ||
| --*p | ||
| --(*p) | ||
| p*-- | ||
| p--* | 
- Learn array access. Consider a single dimension array : int a[5] = {1,2,3,4,5}; - What will be the change in memory or value after each of the below operations ? 
| Statement | What is this ? | sizeof() | Memory or value ? | 
| a | |||
| &a | |||
| a[0] | |||
| &a[0] | |||
| a + 1 | |||
| *(a + 1) | |||
| &(a+1) | |||
| a[1] | |||
| &a[1] | |||
| *(a + 5 - 3) | 
- Learn array access. Consider a double dimension array - int a[3][4] = { {1,2,3}, {4,5,6}, {7,8,9}, }; - What will be the change in memory or value after each of the below operations ? 
| Statement | What is this ? | sizeof() | Memory or value ? | 
| a | |||
| &a | |||
| a[0] | |||
| &a[0] | |||
| a + 1 | |||
| *(a + 1) | |||
| &(a + 1) | |||
| a[1] | |||
| &a[1] | |||
| *(a + 5 - 3) | |||
| a[1][2] | |||
| *(*(a + 1) + 2) | |||
| *(a + 1)[2] | |||
| *(a[1] + 2) | |||
| a[2][1] | |||
| *(*(a + 2) + 1) | |||
| *(a + 2)[1] | |||
| *(a[2] + 1) |