结构体大小的获取

描述

结构体大小的获取

  • 我们使用sizeof()函数来获取结构体的大小
#include


struct test1
{
  int a; // 0 1 2 3
  char b; // 4
  float c; // 8 9 10 11
};


struct test2
{
  int a; // 0 1 2 3
  char b; // 4
  char d; // 5
  char e; // 6
  float c; // 8 9 10 11
};

int main()
{
  struct test1 t1;
  struct test2 t2;  
  int s1=sizeof(t1);
  int s2=sizeof(t2);
  printf("s1=%d,s2=%d",s1,s2);


  return 0;
}

输出结果:

s1=12,s2=12
  • 从上面的例子我们可以看到,t1,t2
    两个结构体的内部的成员变量构成明明不一样,但是最终结构体的大小却是相同的,都是12字节。
  • 这就是因为结构体内存对齐的原因,使得构成并不相同的两个结构体在大小上却是相同的。
  • 其中t2中成员变量d,e占据的内存,是在结构体内存对齐后补齐的空位,因此结构体整体的大小并没有增加。
  • 正是因为结构体存在内存对齐,所以无法对结构体进行比较高效的直接比较,也就是无法对两个结构体整体进行比较。
  • 那么为了比较结构体,我们就想到了对结构体内部成员变量的比较。

结构体的比较

既然要对结构体的成员变量进行比较,那么我们就要先能够获取成员变量。

// 获取方法
变量名.成员变量名
// 对于t1,我们如果想要获取t1的内部成员变量a,那么我们就可以这样写:
t1.a
#include


struct test1
{
  int a;
  char b;
  float c; 
};


// 那么当我们判断两个test1类型的结构体t1,t2是否相等时,就可以这么写
int isEqual(test1 x,test1 y)
{
  if(x.a==y.a && x.b==y.b && x.c==y.c)
  {
    return 1;  // 相等返回 1
  }
  else return 0;  // 不相等返回 0
 } 

int main()
{
  struct test1 t1={1,'a',2.1};   // 声明两个test1类型的结构体变量
  struct test1 t2={1,'a',2.1};
  int r=isEqual(t1,t2);  // 调用函数进行比较
  printf("%d",r);
  return 0;
}

输出结果:

1
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分