# Array and Pointer C Programming Mock Test – 2

 Question 1
What is the output of the following program?
Consider the starting address of int array a is 1000 and char array ch is 2000.
Assume size of int data type is 4 Byte and size of char data type is 1 Byte.
``````#include < stdio.h >
int main()
{
int a[5],*p,*q;
char ch[5],*r,*s;
p=&a[4];
q=&a[1];
r=&ch[4];
s=&ch[1];
printf("%ld %ld",p-q,r-s);
return 0;
}
``````
 A 12 3 B 3 3 C 12 12 D 1 1
C Programming
Question 1 Explanation:

Now pointer arithmetic p-q and r-c can be computed as follow:

p-q=(address stored in p - address store in q)/ size of (int)
NOTE: Here, we have divided subtraction of two pointer by sizeof (int) because p and q are pointer of type int.
(1016-1004)/4=3

r-s=(address stored in r - address store in s)/ size of (char)
NOTE: Here, we have divided subtraction of two pointer by sizeof (char) because r and s are pointer of type char.
(2004-2001)/1=3

OUTPUT : 3 3

Click to Join Our Telegram Group for Latest Update of MOCK TEST

Click Here to Practice ALL Previous MOCK TEST FREE

 Question 2
What is the output of the following program?
Consider the starting address of int array a is 1000 and char array ch is 2000.
Assume size of int data type is 4 Byte and size of char data type is 1 Byte.
``````#include < stdio.h >
int main()
{
int a[5],*p,*q;
char ch[5],*r,*s;
p=&a[4];
q=&a[1];
r=&ch[4];
s=&ch[1];
printf("%ld %ld",(char *)p-(char *)q,(int *)r-(int *)s);
return 0;
}
``````
 A 3 3 B 12 3 C 12 0 D 3 12
C Programming
Question 2 Explanation:

Now pointer arithmetic p-q and r-c can be computed as follow:

(char *)p-(char *)q=(address stored in p - address store in q)/ size of (char)
NOTE: Here, we have divided subtraction of two pointer by sizeof (char) because p and q are pointers converted to type char in printf statement.
(1016-1004)/1=12

(int *)r-(int *)s=(address stored in r - address store in s)/ size of (int)
NOTE: Here, we have divided subtraction of two pointer by sizeof (char) because r and s are pointers converted to type int in printf statement.
(2004-2001)/4=0

OUTPUT : 12 0

Click to Join Our Telegram Group for Latest Update of MOCK TEST

Click Here to Practice ALL Previous MOCK TEST FREE

 Question 3
What is the output of the following program?
Consider the starting address of int array a is 1000.
Assume size of int data type is 4 Byte and address stored in 8 byte.
``````#include < stdio.h >
int main()
{
int a[2][3]={2,5,8,9,3,1};
printf("%d",a[1]-b[0]);
return 0;
}
``````
 A 7 B 4 C 3 D 1
C Programming
Question 3 Explanation:

When we declare 2-D array, by default it will store in row major order in memory.
In pointer subtraction calculation, important to understand is data type of pointer while computing the subtraction.
when we write

a[0][0]
it indicates the int value stored at index [0][0] of array a.

a[0]
it indicates the pointer to int. it points to the address of 0th element of the row-0. so a[0]=1000.

a
it indicates the pointer to array of 3 (as array declared with 3 col.). It point to whole row 0 of 2-D array. So a=1000.

In given question pointer a[1]-a[0] need to computed by compiler. It can be computed as follow:

a[1] is pointer of type int pointing to the starting address of row-1 in given -D array. Hence a[1]=1012 as shown in above figure.
a[0] is pointer of type int pointing to the starting address of row-0 in given -D array. Hence a[1]=1000 as shown in above figure.
Now, a[1]-a[0] is computed by compiler as
(1012-1000)/sizeof(int) = 3.

OUTPUT : 3

Click to Join Our Telegram Group for Latest Update of MOCK TEST

Click Here to Practice ALL Previous MOCK TEST FREE

 Question 4
What is the output of the following program?
Consider the starting address of int array a is 1000.
Assume size of int data type is 4 Byte and address stored in 8 byte.
``````#include < stdio.h >
int main()
{
int a[2][3]{2,5,8,9,3,1};
printf("%d %d %d %d",a,a+1,a[0],a[0]+1);
return 0;
}
``````
 A 1000 1004 2 3 B 1000 1012 2 9 C 1000 1012 1000 1008 D 1000 1012 1000 1004
C Programming
Question 4 Explanation:

When we declare 2-D array, by default it will store in row major order in memory.
a[0] is pointer of type int pointing to the address 0th element of the row-0. Hence, a[0]=1000.
Now, a[0]+1 is pointer arithmetic computed by compiler as a[0]+1 *sizeof(int)=1000+1*4=1004

a is also pointer of type (int * [3]) or pointing to array of 3 int. So a is pointing to starting address of 0th row of 2-D array. Hence, a=1000.
a+1 is pointing to starting address of 1st row of 2-D array. Hence, a=1012.
OR
a+1 is pointer arithmetic computed by compiler as a+1 *sizeof(int *[3])=1000+3*4=1012.

OUTPUT : 1000 1012 1000 1004

Click to Join Our Telegram Group for Latest Update of MOCK TEST

Click Here to Practice ALL Previous MOCK TEST FREE

 Question 5
What is the output of the following program?
Consider the starting address of int array a is 1000.
Assume size of int data type is 4 Byte and address stored in 8 byte.
``````#include < stdio.h >
int main()
{
int a[2][3][2]={1,2,3,4,5,6,7,8,9,10,11,12};
printf("%d %d",a[1]-a[0],a[1][0]-a[0][0]);
return 0;
}
``````
 A 6 6 B 3 3 C 3 6 D 6 3
C Programming
Question 5 Explanation:

a[0][0] is pointer to int and pointing to the element a[0][0][0] as shown in above figure. Hence, a[0][0]=1000.

a[1][0] is pointer to int and pointing to the element a[1][0][0] as shown in above figure. Hence, a[1][0]=1024.

So, a[1][0]-a[0][0] computed by compiler as (1024-1000)/sizeof(int)=24/4=6.

a[0] is pointer to array of 2 int (row of 2 int) and pointing to the 0th row of the 0th 2-D array as shown in above figure. Hence, a[0][0]=1000.

a[1] is pointer to array of 2 int (row of 2 int) and pointing to the 0th row of the 1st 2-D array as shown in above figure. Hence, a[1][0]=1024.

So, a[1]-a[0] computed by coompiler as (1024-1000)/sizeof(row of two int)=24/8=3

OUTPUT : 3 6

Click to Join Our Telegram Group for Latest Update of MOCK TEST

Click Here to Practice ALL Previous MOCK TEST FREE