# 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,*p,*q;
char ch,*r,*s;
p=&a;
q=&a;
r=&ch;
s=&ch;
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 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,*p,*q;
char ch,*r,*s;
p=&a;
q=&a;
r=&ch;
s=&ch;
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 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,5,8,9,3,1};
printf("%d",a-b);
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
it indicates the int value stored at index  of array a.

a
it indicates the pointer to int. it points to the address of 0th element of the row-0. so a=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-a need to computed by compiler. It can be computed as follow:

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

OUTPUT : 3 Click to Join Our Telegram Group for Latest Update of MOCK TEST 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,5,8,9,3,1};
printf("%d %d %d %d",a,a+1,a,a+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 is pointer of type int pointing to the address 0th element of the row-0. Hence, a=1000.
Now, a+1 is pointer arithmetic computed by compiler as a+1 *sizeof(int)=1000+1*4=1004

a is also pointer of type (int * ) 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 *)=1000+3*4=1012.

OUTPUT : 1000 1012 1000 1004 Click to Join Our Telegram Group for Latest Update of MOCK TEST 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={1,2,3,4,5,6,7,8,9,10,11,12};
printf("%d %d",a-a,a-a);
return 0;
}
``````
 A 6 6 B 3 3 C 3 6 D 6 3
C Programming
Question 5 Explanation: a is pointer to int and pointing to the element a as shown in above figure. Hence, a=1000.

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

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

a 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=1000.

a 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=1024.

So, a-a 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 