被小看struct,很贼的%$#

本文探讨了C语言中结构体的内存对齐规则,通过具体的实例stru1、stru2、stru3和stru4展示了不同类型的成员变量如何影响结构体的大小,并解释了为何某些情况下结构体会按照特定类型的最大对齐值进行对齐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来个测试--------------------------

 struct stru1

{

       char m1;

       double m2;

};

struct stru2

{

     int n1;

     stru1   n2;

    char * pn3;

};

sizeof(stru1)=?

sizeof(stru2)=?

这个问题时我刚刚编程时发现的,一直调试。。。

答案1:12   20   ,答案2: 16   24。

如果你中了,就写个测试看看,发现错了#¥%。

仔细分析:

stru1应该按double类型对齐,就是8个字节对齐。

stru2呢?看似与stru1无关,可是内存布局将stru2也按double类型对齐了(常规想法应该按4个字节对齐的)

因此答案为: 16   32

下面应该知道这个的答案了:

stru3

{

      int n1,n2;

      stru1 n3;

     char *pn4;

};

sizeof(stru3) = 32,和stru2一样的。

stru4

{

      int n1,n2;

      stru1 n3;

     char *pn4;

      int n5;

};

sizeof(stru4) = 32,一样的。

呵呵!写了下来,大伙别见笑)))

"Cannot resolve org.mapstruct:mapstruct:${org.mapstruct.version}" 这个错误通常是由于在项目的依赖配置中找不到对应的mapstruct版本所导致的。根据引用和引用的内容,你可以尝试以下几个解决方法: 1. 确认项目的pom.xml(或其他构建文件)中是否正确引入了mapstruct和mapstruct-processor的依赖,并且版本号是正确的。比如,确保以下这段代码被正确添加到依赖配置中: ```xml <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${org.mapstruct.version}</version> </dependency> ``` 2. 确认你的项目使用的mapstruct和mapstruct-processor的版本是否匹配。根据引用的内容,mapstruct和lombok版本需要匹配,所以你还需要检查lombok的版本是否与mapstruct的版本兼容。 3. 如果仍然无法解决问题,你可以尝试在项目的构建工具(如Maven或Gradle)中清除本地缓存并重新下载依赖,以确保你使用的是最新的依赖版本。 总之,要解决"Cannot resolve org.mapstruct:mapstruct:${org.mapstruct.version}"的问题,请确保正确配置了mapstruct和mapstruct-processor的依赖,并且版本号是正确的,并且检查mapstruct和lombok的版本是否匹配。如果问题仍然存在,可以尝试清除本地缓存并重新下载依赖。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [mapstruct 1.2.0.Final 使用问题及配置](https://blog.youkuaiyun.com/spjhandsomeman/article/details/122359844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值