C - 找出结构的大小

时间:2011-09-12 03:36:34

标签: c pointers structure

我被问到这是面试问题。无法回答。

  

编写C程序以查找结构大小而不使用sizeof运算符。

7 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:4)

这是另一种方法。 它还没有完全定义,但仍然适用于大多数系统。

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

答案 2 :(得分:1)

这是两种形式的sizeof的两个宏版本(采用类型与接受变量),您可以将这些代码用于您不允许使用的所有代码{{{ 1}}:

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)) - 代码中的替代品。 (太糟糕了,你无法修复多重评估错误。)

答案 3 :(得分:1)

这是另一种方法......不需要创建任何结构实例。

struct  XYZ{
    int x;
    float y;
    char z;
};

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

它是如何运作的?

((struct XYZ *)0) + 1 = zero + size of structure
                      = size of structure

答案 4 :(得分:0)

对于喜欢C宏样式编码的人来说,这是我对此的看法:

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

答案 5 :(得分:0)

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

答案 6 :(得分:-2)

struct  ABC

{

int a;

float b;

char c;

};


void main()
{

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

ptr++;

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

}