结构体大小的获取 :
- 我们使用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
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
内存
+关注
关注
8文章
2767浏览量
72777 -
函数
+关注
关注
3文章
3903浏览量
61310 -
变量
+关注
关注
0文章
596浏览量
28112 -
sizeof
+关注
关注
0文章
9浏览量
6421 -
结构体
+关注
关注
1文章
125浏览量
10750
发布评论请先 登录
相关推荐
【武汉华嵌】结构体的sizeof问题
和编译器有关。就一般情况而言,主要有以下三个原则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;2) 结构体每个成员相对于
发表于 03-22 16:26
labview调用dll获取硬件信息结构体求教
想调用winmm.dll中的waveOutGetDevCaps获取声卡信息,但是里面有结构体数据,尝试了几次都失败告终,求大虾指教。MMRESULT waveOutGetDevCaps
发表于 01-14 10:20
C语言结构体(struct)常见使用方法
的是一片连续空间。其实这不应该算一个机制,感觉应该更像一个技巧吧)20160405补充:非弹性数组不能用”char a[]”这种形式定义弹性(flexible)变量,必须明确大小。弹性数组在结构体中
发表于 08-23 18:18
结构体与共用体的区别
转载重点:共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。图形分析影响过程通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C
发表于 07-20 06:57
GPIO结构体定义
#include "stm32f4xx.h"#include "usart.h"void My_USART1_Init(void){//GPIO结构体定义 GPIO_InitTypeDefGPIO_InitStructure;//串口结
发表于 08-04 07:47
关于labview传入参数到DLL结构体
labview给DLL中结构体传入参数,要保证字节对齐下面是注意事项,很关键:labview中层次结构数据类型(例如,簇)中的数组和字符串始终包括大小信息。所以簇内存中包含字符串的
发表于 11-08 20:30
C语言中创建一个结构体其实际占用的内存空间大小是多少呢?
际占用的内存空间大小是多少呢?示例代码如下:struct S{int i;char c;int j;};要正确计算结构体大小,首先需要了解数据对齐的原理。数据对齐
发表于 09-29 11:57
评论