C - Find the size of structure

后端 未结 7 985
再見小時候
再見小時候 2021-02-10 01:43

I was asked this as interview question. Couldn\'t answer.

Write a C program to find size of structure without using the sizeof operator.

相关标签:
7条回答
  • 2021-02-10 01:49

    Here's two macro versions for the two forms of sizeof (takes a type vs. takes a variable) that you can use for all the code you'll never write where you aren't allowed to use sizeof:

    #define type_sizeof(t) (size_t)((char *)((t *)1024 + 1) - (char *)((t *)1024))
    #define var_sizeof(v)  (size_t)((char *)(&(v) + 1) - (char *)&(v))
    

    Perhaps with some deep magic you can combine the two into a single macro that will almost serve as a drop-in replacement in all this sizeof-less code. (Too bad you can't fix the multiple-evaluation bugs.)

    0 讨论(0)
  • 2021-02-10 01:50
    struct ABC
    {
        int a, b[3];
        int c;
        float d;
        char e, f[2];
    };
    int main()
    {
        struct ABC *ptr=(struct ABC *)0;
        clrscr();
        ptr++;
        printf("Size of structure is: %d",ptr);
        return 0;
    }
    
    0 讨论(0)
  • 2021-02-10 01:53
    struct  XYZ{
        int x;
        float y;
        char z;
    };
    
    int main(){
        struct XYZ arr[2];
        int sz = (char*)&arr[1] - (char*)&arr[0];
        printf("%d",sz);
        return 0;
    }
    
    0 讨论(0)
  • 2021-02-10 01:56

    Here's another approach. It also isn't completely defined but will still work on most systems.

    typedef struct{
        //  stuff
    } mystruct;
    
    int main(){
        mystruct x;
        mystruct *p = &x;
    
        int size = (char*)(p + 1) - (char*)p;
        printf("Size = %d\n",size);
    
        return 0;
    }
    
    0 讨论(0)
  • 2021-02-10 01:59

    Here is another approach.... no need to create any instance of structure.

    struct  XYZ{
        int x;
        float y;
        char z;
    };
    
    int main(){
        int sz = (int) (((struct XYZ *)0) + 1);
        printf("%d",sz);
        return 0;
    }
    

    How does it work?

    ((struct XYZ *)0) + 1 = zero + size of structure
                          = size of structure
    
    0 讨论(0)
  • 2021-02-10 02:02
    struct  ABC
    
    {
    
    int a;
    
    float b;
    
    char c;
    
    };
    
    
    void main()
    {
    
    struct ABC *ptr=(struct ABC *)0;
    
    ptr++;
    
    printf("Size of structure is: %d",*ptr);
    
    }
    
    0 讨论(0)
提交回复
热议问题