Consider these declarations in a code.
char x, y, *p, **pp;
char *array[5], arr[5];
char *f(int), **g(int) ;
struct node a, b,* h(int); / * assume the size of node is 20 */
Then, what will be the values of the following?
1. sizeof(x)
2. sizeof(y)
3. sizeof(*p)
4. sizeof(p)
5. sizeof(**pp)
6. sizeof(*pp)
7. sizeof(pp)
8. sizeof(* array [0])
9. sizeof(array[0])
10. sizeof(arr [5] )
11. sizeof(*f(5))
12. sizeof(f(5)) /* is the size of a function?! */
13. sizeof(**g(6))
14. sizeof(*g(6))
15. sizeof(g(6))
16. sizeof(a)
17. sizeof(*b)
18. sizeof(b)
19. sizeof(*h(5))
20. sizeof(h(5))
Considering that size of char is 1 byte and pointers have a size of 4 bytes. Here are the answers.
1. 1 byte
2. 1 byte
3. 1 byte
4. 4 bytes
5. 1 byte
6. 4 bytes
7. 4 bytes
8. 1 byte
9. 4 bytes
10. 1 byte
11. 1byte
12. 4 bytes
13. 1 byte
14. 4 bytes
15. 4 bytes
16. 20 bytes
17. 20 bytes
18. 4 bytes
19. 20 bytes
20. 4 bytes
We are almost sure; we got all the answers right, but did we beat the clock? Did we do it within 60 seconds?
Well! Here is how to get the measure on size really fast… For this we need to remember the following two things.
First: refresh what we discussed in the “Moving the Stars” snippet. That virtual equal to sign helps a lot in getting the size right. Second: Any pointer of any type has the size 4 bytes (we are by default considering 32 bit machines. The pointer size can, of course, change with machines.)
Let us answer the questions we put earlier…
Question 1 and Answer:
We have
char x;
Which can be read as
char = x
Therefore,
sizeof(x) = sizeof(char) = 1
Question 2 and Answer:
As above, the answer is again 1 byte
Question 3 and Answer:
Given
char *p;
What is the sizeof(*p)?
Because char = *p, therefore
sizeof(*p)= sizeof(char) = 1
Question 4 and Answer:
Given
char *p;
What is the sizeof(p)?
Because char * = p, therefore,
sizeof(p) = sizeof(char *) = 4
Question 5 and Answer:
Given
char **pp;
What is the sizeof (**pp)?
Because char = **pp, therefore
sizeof (**pp) = sizeof (char) = 1
Question 6 and Answer:
Given,
char **pp;
What is the sizeof(*pp)?
Because char * =*pp, therefore
sizeof(*pp) = sizeof(char *) = 4
Question 7 and Answer:
Given,
char **pp,
What is the sizeof (pp)?
Because char ** = p, therefore
sizeof(p) = sizeof(char **) = 4
Question 8 is interesting, because we are apparently trying to find the size of a function, which is unusual. But we can compute the size of functions. However what it means is the size of its return values.
Let us take up Question 8 and Answer:
Given char * f(int); what is sizeof(*f(5));
Because char = * f(int), therefore
sizeof (* f(5)) = sizeof(char) = 1
Question 9 and Answer:
Given char *f(int) what is sizeof(f(5))?
Because char * = f(int), therefore sizeof (f(5)) = sizeof(char *) = 4.
Now that we know what we mean by size of a function, the remaining questions should be easy to answer quickly. Let's do it to be sure. This trick works with any C/C++ declarations.
By the way, why do we need to know the size of any variable correctly, the answer is to malloc correctly to get the correct amount of memory. If we give a wrong size for memory allocation, chances are that we will take days
to find out why the program misbehaves in strange ways.
This snippet has helped to explain in detail the aspects of sizeof.
Let us answer the questions we put earlier…
Question 1 and Answer:
We have
char x;
Which can be read as
char = x
Therefore,
sizeof(x) = sizeof(char) = 1
Question 2 and Answer:
As above, the answer is again 1 byte
Question 3 and Answer:
Given
char *p;
What is the sizeof(*p)?
Because char = *p, therefore
sizeof(*p)= sizeof(char) = 1
Question 4 and Answer:
Given
char *p;
What is the sizeof(p)?
Because char * = p, therefore,
sizeof(p) = sizeof(char *) = 4
Question 5 and Answer:
Given
char **pp;
What is the sizeof (**pp)?
Because char = **pp, therefore
sizeof (**pp) = sizeof (char) = 1
Question 6 and Answer:
Given,
char **pp;
What is the sizeof(*pp)?
Because char * =*pp, therefore
sizeof(*pp) = sizeof(char *) = 4
Question 7 and Answer:
Given,
char **pp,
What is the sizeof (pp)?
Because char ** = p, therefore
sizeof(p) = sizeof(char **) = 4
Question 8 is interesting, because we are apparently trying to find the size of a function, which is unusual. But we can compute the size of functions. However what it means is the size of its return values.
Let us take up Question 8 and Answer:
Given char * f(int); what is sizeof(*f(5));
Because char = * f(int), therefore
sizeof (* f(5)) = sizeof(char) = 1
Question 9 and Answer:
Given char *f(int) what is sizeof(f(5))?
Because char * = f(int), therefore sizeof (f(5)) = sizeof(char *) = 4.
Now that we know what we mean by size of a function, the remaining questions should be easy to answer quickly. Let's do it to be sure. This trick works with any C/C++ declarations.
By the way, why do we need to know the size of any variable correctly, the answer is to malloc correctly to get the correct amount of memory. If we give a wrong size for memory allocation, chances are that we will take days
to find out why the program misbehaves in strange ways.
This snippet has helped to explain in detail the aspects of sizeof.
No comments:
Post a Comment