C - Find the size of structure

こ雲淡風輕ζ 提交于 2019-12-09 06:32:07

问题


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

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


回答1:


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;
}



回答2:


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;
}



回答3:


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.)




回答4:


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



回答5:


For people that like C macro style coding, here is my take on this:

#define SIZE_OF_STRUCT(mystruct)     \
   ({ struct nested_##mystruct {     \
         struct mystruct s;          \
         char end[0];                \
      } __attribute__((packed)) var; \
      var.end - (char *)&var; })

void main()
{
   struct mystruct {
      int c;
   };

   printf("size %d\n", SIZE_OF_STRUCT(mystruct));
}



回答6:


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;
}



回答7:


struct  ABC

{

int a;

float b;

char c;

};


void main()
{

struct ABC *ptr=(struct ABC *)0;

ptr++;

printf("Size of structure is: %d",*ptr);

}


来源:https://stackoverflow.com/questions/7383047/c-find-the-size-of-structure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!