Exercise-3 : “strutures pointer & array ” combinations
- Learn structure member access. Consider the code snippet below. An integer inside structure
struct abc { int x; }; struct abc a; struct abc *p = &a;
What will be the change in memory or value after each of the below operations ?
Statement |
What is this ? |
sizeof() |
Memory or value ? |
Actual Arguments |
Formal Arguments ? |
&a |
fun(&a); |
||||
a |
fun(a); |
||||
a.x |
fun(a.x); |
||||
&a.x |
fun(&a.x); |
||||
&p |
fun(&p); |
||||
p |
fun(p); |
||||
*p |
fun(*p); |
||||
p[0] |
fun(p[0]); |
||||
p->x |
fun(p->x); |
||||
&(p->x) |
fun(&p->x); |
||||
(*p).x |
fun((*p).x); |
||||
&((*p).x) |
fun(&((*p).x)); |
- Learn structure member access. Consider the code snippet below. An integer pointer inside structure
struct abc { int *x; }; struct abc a; struct abc *p = &a; int q = 5; a.x = &q;
What will be the change in memory or value after each of the below operations ?
Statement |
What is this ? |
sizeof() |
Memory or value ? |
Actual Arguments |
Formal Arguments ? |
&a |
fun(&a); |
||||
a |
fun(a); |
||||
a.x |
fun(a.x); |
||||
&a.x |
fun(&a.x); |
||||
*(a.x) |
fun(*(a.x)); |
||||
&p |
fun(&p); |
||||
p |
fun(p); |
||||
*p |
fun(*p); |
||||
p[0] |
fun(p[0]); |
||||
p->x |
fun(p->x); |
||||
&(p->x) |
fun(&(p->x)); |
||||
(*p).x |
fun((*p).x); |
||||
&((*p).x) |
fun(&((*p).x)); |
||||
*(p->x) |
fun(*(p->x)); |
||||
*(&(p->x)) |
fun(*(&(p->x))); |
||||
*((*p).x) |
fun(*((*p).x)); |
||||
*(&((*p).x)) |
fun(*(&((*p).x))); |
- Learn structure member access. Consider the code snippet below. A single dimension integer array inside structure
struct abc { int x[5]; } a = { .x = {1,2,3,4,5} }, *p = &a;
What will be the change in memory or value after each of the below operations ?
Statement |
What is this ? |
sizeof() |
Memory or value ? |
Actual Arguments |
Formal Arguments ? |
&a |
fun(&a); |
||||
a |
fun(a); |
||||
a.x |
fun(a.x); |
||||
&a.x |
fun(&a.x); |
||||
&p |
fun(&p); |
||||
p |
fun(p); |
||||
*p |
fun(*p); |
||||
p[0] |
fun(p[0]); |
||||
p->x |
fun(p->x); |
||||
&(p->x) |
fun(&(p->x)); |
||||
(*p).x |
fun((*p).x); |
||||
&((*p).x) |
fun(&((*p).x)); |
||||
a.x[2] |
fun(a.x[2]); |
||||
*(a.x + 2) |
fun(*(a.x + 2)); |
||||
(*p).x[2] |
fun((*p).x[2]); |
||||
p->x[2] |
fun(p->x[2]); |
||||
*((*p).x + 2) |
fun(*((*p).x + 2)); |
||||
*(p->x + 2) |
fun(*(p->x + 2)); |
||||
a.x[3] |
fun(a.x[3]); |
||||
*(a.x + 3) |
fun(*(a.x + 3)); |
||||
(*p).x[3] |
fun((*p).x[3]); |
||||
p->x[3] |
fun(p->x[3]); |
||||
*((*p).x + 3) |
fun(*((*p).x + 3)); |
||||
*(p->x + 3) |
fun(*(p->x + 3)); |
- Learn structure member access. Consider the code snippet below. A double dimension integer array inside structure
struct abc { int x[3][4]; } a = { .x = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, } }, *p = &a;
What will be the change in memory or value after each of the below operations ?
Statement |
What is this ? |
sizeof() |
Memory or value ? |
Actual Arguments |
Formal Arguments ? |
&a |
fun(&a); |
||||
a |
fun(a); |
||||
a.x |
fun(a.x); |
||||
&a.x |
fun(&a.x); |
||||
&p |
fun(&p); |
||||
p |
fun(p); |
||||
*p |
fun(*p); |
||||
p[0] |
fun(p[0]); |
||||
p->x |
fun(p->x); |
||||
&(p->x) |
fun(&(p->x)); |
||||
(*p).x |
fun((*p).x); |
||||
&((*p).x) |
fun(&((*p).x)); |
||||
a.x[2] |
fun(a.x[2]); |
||||
*(a.x + 2) |
fun(*(a.x + 2)); |
||||
(*p).x[2] |
fun((*p).x[2]); |
||||
p->x[2] |
fun(p->x[2]); |
||||
*((*p).x + 2) |
fun(*((*p).x + 2)); |
||||
*(p->x + 2) |
fun(*(p->x + 2)); |
||||
a.x[3] |
fun(a.x[3]); |
||||
*(a.x + 3) |
fun(*(a.x + 3)); |
||||
(*p).x[3] |
fun((*p).x[3]); |
||||
p->x[3] |
fun(p->x[3]); |
||||
*((*p).x + 3) |
fun(*((*p).x + 3)); |
||||
*(p->x + 3) |
fun(*(p->x + 3)); |
||||
a.x[2][1] |
fun(a.x[2][1]); |
||||
(*(a.x + 2))[3] |
fun((*(a.x + 2))[3]); |
||||
*(*(a.x + 2) + 1) |
fun(*(*(a.x + 2) + 1)); |
||||
p->x[2][1] |
fun(p->x[2][1]); |
||||
(*p).x[2][1] |
fun((*p).x[2][1]); |
||||
(*(p->x + 2))[3] |
fun((*(p->x + 2))[3]); |
||||
(*((*p).x + 2))[3] |
fun((*((*p).x + 2))[3]); |
||||
*(*(p->x + 2) + 1) |
fun(*(*(p->x + 2) + 1)); |
||||
*(*((*p).x + 2) + 1) |
fun(*(*((*p).x + 2) + 1)); |
||||
*(*(p->x)) |
fun(*(*(p->x))); |
||||
*(*((*p).x)) |
fun(*(*((*p).x))); |