C和指针之结构体大小和成员变量位置距离结构开始存储的位置偏移字节
【摘要】 1、问题
1)、结构体大小
结构体成员的内存分配满足下面三个条件 2 结构体第一个成员的地址和结构体的首地址相同 3 结构体每个成员地址相对于结构体首地址的偏移量是该成员大小的整数倍,如果不是则编译器会在成员之间添加填充字节 4 结构体总的大小要是其成员中最大size的整数倍,如果不是编译器会在其末尾添加...
1、问题
1)、结构体大小
结构体成员的内存分配满足下面三个条件
2 结构体第一个成员的地址和结构体的首地址相同
3 结构体每个成员地址相对于结构体首地址的偏移量是该成员大小的整数倍,如果不是则编译器会在成员之间添加填充字节
4 结构体总的大小要是其成员中最大size的整数倍,如果不是编译器会在其末尾添加填充字节
2)、成员变量位置距离结构开始存储的位置偏移字节
我们用offsetof函数
2、测试Demo
-
#include <stdio.h>
-
#include <stddef.h>
-
-
#define PRODUCT_SIZE 20
-
-
struct A
-
{
-
int a;
-
char b;
-
char d;
-
};
-
-
struct AA
-
{
-
char a;
-
int b;
-
char c;
-
};
-
-
struct B
-
{
-
-
char a;
-
double b;
-
char c;
-
char d[9];
-
int e;
-
};
-
-
typedef struct
-
{
-
char product[PRODUCT_SIZE];
-
int qunatity;
-
float unit_price;
-
float total_amount;
-
char s;
-
} Transaction;
-
-
struct C
-
{
-
int a;
-
char b;
-
short c;
-
double d;
-
int f;
-
};
-
-
int main()
-
{
-
printf("float size is %d\n", sizeof(float));
-
printf("short size is %d\n", sizeof(short));
-
printf("long size is
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/78650124
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)