C Programming - Arrays - Discussion
Discussion Forum : Arrays - Find Output of Program (Q.No. 6)
6.
What will be the output of the program if the array begins at 65472 and each integer occupies 2 bytes?
#include<stdio.h>
int main()
{
int a[3][4] = {1, 2, 3, 4, 4, 3, 2, 1, 7, 8, 9, 0};
printf("%u, %u\n", a+1, &a+1);
return 0;
}
Answer: Option
Explanation:
Step 1: int a[3][4] = {1, 2, 3, 4, 4, 3, 2, 1, 7, 8, 9, 0}; The array a[3][4] is declared as an integer array having the 3 rows and 4 colums dimensions.
Step 2: printf("%u, %u\n", a+1, &a+1);
The base address(also the address of the first element) of array is 65472.
For a two-dimensional array like a reference to array has type "pointer to array of 4 ints". Therefore, a+1 is pointing to the memory location of first element of the second row in array a. Hence 65472 + (4 ints * 2 bytes) = 65480
Then, &a has type "pointer to array of 3 arrays of 4 ints", totally 12 ints. Therefore, &a+1 denotes "12 ints * 2 bytes * 1 = 24 bytes".
Hence, begining address 65472 + 24 = 65496. So, &a+1 = 65496
Hence the output of the program is 65480, 65496
Discussion:
29 comments Page 3 of 3.
San said:
1 decade ago
&a+1 is the address of the variable stored next to the array.
Array requires "12 int * 2 bytes = 24 bytes".
Hence,
65472 + 24 = 65496. So, &a+1 = 65496.
Array requires "12 int * 2 bytes = 24 bytes".
Hence,
65472 + 24 = 65496. So, &a+1 = 65496.
Niyati said:
1 decade ago
What does &a+1 mean?How the result of this is 65496?
Onkar said:
1 decade ago
What will happen in a++ ?
If we want to move to a[0][1] what will be the expression ?
Please explain.
If we want to move to a[0][1] what will be the expression ?
Please explain.
Nandu said:
1 decade ago
@varsha:
In quesion he mension that the array starts from 65472,
So base address z 65472
In quesion he mension that the array starts from 65472,
So base address z 65472
Varsha said:
1 decade ago
But how we got the base address is 65472?
Whiteperl said:
1 decade ago
@neha.
Thanks but how 65496 came?
Thanks but how 65496 came?
Neha said:
1 decade ago
As we know s+2 of a two dimensional array is s[2][0] means 1st element of 3rd row, as then 1st row's 1st element is s[0][0] then its clear now s+1 is the 1st element of 2nd row.
Now to reach 1st element of 2nd row there are 4integers (see the columm number) to cross,i.e 4*2bytes=8bytes will be added to the base address [i.e. s[0][0]'s address 65472] 65472+8 = 65480.
Now to reach 1st element of 2nd row there are 4integers (see the columm number) to cross,i.e 4*2bytes=8bytes will be added to the base address [i.e. s[0][0]'s address 65472] 65472+8 = 65480.
Lavanya said:
1 decade ago
Can anyone explain briefly.?
Wikiok said:
1 decade ago
Each "int" occupies 2 bytes. So it has to be multiplied with 2.
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers