+ 3
Why the output is 50?
#include <stdio.h> #define A 5 #define B 10 /*suppose size of pointer is 4 bytes*/ int main() { char (*p)[A][B]; printf("%u",sizeof(*p)); return 0; } Here comes code but i wonder why won't we multiply A x B x 4 == 5 x 10 x 4 which is 200 but I don't why answer is 50 , please someone explain this..
2 Answers
+ 2
C types can look ugly and not very obvious some times.
p is a pointer to char[A][B]. Therefor:
sizeof(p) == sizeof a pointer == 4
sizeof(*p) == A * B * sizeof(char) == 50
What you expected is, if you define p like
char *p[A][B];
without parentheses. Now p is a char*[A][B].
+ 2
Because you aren't getting the size of the pointer when you use the sizeof function, you are getting the size of the char array which is 5x10x1=50 bytes.
If you want to get the size of the pointer, you should use sizeof(p), which will be equal to 8 bytes, not 200.
Because pointers' size doesn't change according to what they're pointing to.