c - Is it possible to get the size of the item the pointer is pointing at? -
is possible find size of item_t through pointer?
typedef struct item { char x; char y; char life; }item_t; void main (void) { item_t test; void *ptr = &test; printf("%d\n",sizeof(ptr)); } return: 8
not if ptr of type void* -- shouldn't be.
you can't dereference void* pointer. can convert other pointer type , dereference result of conversion. can useful, more should define pointer correct type in first place.
if want pointer item_t object, use item_t* pointer:
item_t test; item_t *ptr = &test; printf("%zu\n", sizeof(*ptr)); this give size of single item_t object, because that's type ptr points to. if ptr uninitialized, or null pointer, you'll same result, because operand of sizeof not evaluated (with 1 exception doesn't apply here). if ptr initialized point initial element of array of item_t objects:
ptr = malloc(42 * sizeof *ptr); sizeof *ptr still give size of 1 of them.
the sizeof operator (usually) evaluated @ compile time. uses information that's available compiler. no run-time calculation performed. (the exception operand type variable-length array.)
the correct format printing value of type size_t (such result of sizeof) %zu, not %d.
and void main(void) should int main(void) (unless have reason use non-standard definition -- don't). if book told define main return type of void, better book; author doesn't know c well.
Comments
Post a Comment