How to find the size of a variable without using sizeof

34,385

Solution 1

You can use the following macro, taken from here:

#define sizeof_var( var ) ((size_t)(&(var)+1)-(size_t)(&(var))) 

The idea is to use pointer arithmetic ((&(var)+1)) to determine the offset of the variable, and then subtract the original address of the variable, yielding its size. For example, if you have an int16_t i variable located at 0x0002, you would be subtracting 0x0002 from 0x0006, thereby obtaining 0x4 or 4 bytes.

However, I don't really see a valid reason not to use sizeof, but I'm sure you must have one.

Solution 2

It's been ages since I wrote any C code and I was never good at it, but this looks about right:

int i = 1;
size_t size = (char*)(&i+1)-(char*)(&i);
printf("%zi\n", size);

I'm sure someone can tell me plenty of reasons why this is wrong, but it prints a reasonable value for me.

Solution 3

This works..

int main() {
    int a; //try changing this to char/double/float etc each time//
    char *p1, *p2;
    p1 = &a;
    p2 = (&a) + 1;
    printf("size of variable is:%d\n", p2 - p1);
}

Solution 4

int *a, *b,c,d;/* one must remove the declaration of c from here*/
int c=10;
a=&c;
b=a;
a++;
d=(int)a-(int)b;
printf("size is %d",d);
Share:
34,385
codingfreak
Author by

codingfreak

Updated on May 17, 2021

Comments

  • codingfreak
    codingfreak about 3 years

    Let us assume I have declared the variable 'i' of certain datatype (might be int, char, float or double) ...

    NOTE: Simply consider that 'i' is declared and dont bother if it is an int or char or float or double datatype. Since I want a generic solution I am simply mentioning that variable 'i' can be of any one of the datatypes namely int, char, float or double.

    Now can I find the size of the variable 'i' without sizeof operator?