in Programming in C retagged by
23,204 views
35 votes
35 votes

Consider the following C program.

#include <stdio.h>
int main ()  {
    int  a[4] [5] = {{1, 2, 3, 4, 5},
                    {6, 7,8, 9, 10},
                    {11, 12, 13, 14, 15},
                    {16, 17,18, 19, 20}};
    printf(“%d\n”, *(*(a+**a+2)+3));
    return(0);
}

The output of the program is _______.

in Programming in C retagged by
by
23.2k views

2 Comments

Concept:

a = address of 0th index of 2D array i.e address of 1D array {1,2,3,4,5}.

*a = address of 0th index element of 0th index of above array i.e address of first element of array(1)

**a = value of 0th index element of 0th index of array above i.e 1.

Similarly (a+3) represents address of 3rd index of 1-D array, *(a+3) represents address of 0th index of 3rd index of 1D array i.e address of 16

0
0
good question on 2 dimensional array ,really enjoyed that
0
0

2 Answers

50 votes
50 votes
Best answer

'$a$' is a two dimensional array.

  • $a =$ address of $0^{th}$ index of 2-D array which means address of 1-D array
  • $^*a =$  address of $0^{th}$ index element of $0^{th}$ index 1-D array
  • $^{**}a =$ value at $0^{th}$ index element of $0^{th}$ index 1-D array
    • $\implies ^{**}a = 1$
    • $\implies ^{**}a+2 = 1+2 = 3$
  • $a+3 =$ address of $3^{rd}$ index 1-D array
  • $^*(a+3) = $ address of $0^{th}$ index element of $3^{rd}$ index 1-D array
  • $^*(a+3)+3 =$ address of $3^{rd}$ index element of $3^{rd}$ index 1-D array
  • $^*(^*(a+3)+3) =$ value at $3^{rd}$ index element of $3^{rd}$ index 1-D array $= 19$

Correct Answer: $19.$

selected by

3 Comments

0
0
Amazing!
0
0
Easy conversion for these qs: $*(a+i) = a[i]$

Thus, $^*(a+3) = a[3]$

and $^*(^*(a+3)+3) = *(a[3]+3) = a[3][3] = 19$
15
15
7 votes
7 votes

Answer : 19

a[4] [5] = {{1, 2, 3, 4, 5},

                   {6, 7,8, 9, 10},

                 {11, 12, 13, 14, 15},

                 {16, 17,18, 19, 20}};

Lets solve step-by step :   

step1-   * ( * ( a + ( * ( * a ) ) + 2 ) + 3 )           // note :     ( *(* a)) = 1

step2-    * ( * ( ( (a + 1 )+ 2) ) + 3 )                 

step3-    * ( * ( a + 3) +3)                                // note :    *(a+3)   is address of the memory location where                                                                                                                                           16 is stored or address of 4th row

step4-    * ( * ( a + 3) +3)                                // note. :    *(a+3)+3 now its the address of 4th row and 4th column index.                                                                                                                (a+0) is 1st row so a+3 is 4th row or address of 19

step5-    * ( * ( a + 3) +3)  means value stored at 4th row and 4th column .

so , 19

Answer:

Related questions