社区
C语言
帖子详情
结构和数组的转换问题
Alexeyomux
2002-09-04 07:46:33
定义结构
struct
{
char a;
short b;
int c;
char d;
}abc;
struct abc* p;
char buf[100];
p = buf;
赋值后输出buf(16进制)
其中要改变编译对齐参数
请问输出buf(16进制)和改变编译对齐参数是什么意思?此题作何解?
...全文
49
7
打赏
收藏
结构和数组的转换问题
定义结构 struct { char a; short b; int c; char d; }abc; struct abc* p; char buf[100]; p = buf; 赋值后输出buf(16进制) 其中要改变编译对齐参数 请问输出buf(16进制)和改变编译对齐参数是什么意思?此题作何解?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cxjddd
2002-09-04
打赏
举报
回复
可以优化一下啊:
struct abc
{
char a;
char d;
short b;
int c;
};
ustcxumq
2002-09-04
打赏
举报
回复
多谢楼上的,也让我更深的理解了位和存储
Alexeyomux
2002-09-04
打赏
举报
回复
感谢各位指点!
joke100
2002-09-04
打赏
举报
回复
#pragma pack(1) // 单字节对齐
struct abc
{
char a;
short b;
int c;
char d;
};
#pragma pack() // 恢复对齐的默认设置
一般默认是四字节对齐,如果不改为单字节对齐的话,那么a与b之间将插入3个字节,b与c之间插入2字节....
abc HAHA;
sizeof(HAHA);
所以,不单字节对齐,sizeof(HAHA) > (sizeof(HAHA.a) + sizeof(HAHA.b) + sizeof(HAHA.c) + sizeof(HAHA.d))
明白原因了吧???
答案,四字节对齐sizeof(HAHA)等于16
单字节对齐sizeof(HAHA)等于8
mzz_810
2002-09-04
打赏
举报
回复
题目要求是对p的每个成员赋值,然后打印出buf,看看p的成员是如何在内存中存放的。在不同的对齐参数下,存放位置是不同的。
这个题目目的是让你了解变量在内存中的存放方式!
mzz_810
2002-09-04
打赏
举报
回复
编译对齐参数指的是变量在内存中的对齐方式,对于32位CPU来说,一般缺省认为是按4字节对齐,因此结构abc的成员b是从偏移4字节处开始存放的,成员a后面3个字节是空着的。
但是,通过改变编译对齐参数,可以改变内存中的对齐方式,如指定:
#pragma align 1
则之后的代码是按字节对齐的,即成员a、b、c、d是连续存放的。
#pragma align 0 表示按缺省对齐方式
jerry921
2002-09-04
打赏
举报
回复
应该为:
typedef struct
{
char a;
short b;
int c;
char d;
}abc;
数组
到
结构
体
转换
和联合体与位段结合中的大小端
问题
移植驱动代码时发现工程中使用了如下形式的代码 typedef struct BlkTestTag{ uint16_t m_u1Var1; uint8_t reserve[2]; uint32_t m_u4Var2; }BlkTest; ...
c语言
结构
体大小端
转换
,
数组
到
结构
体
转换
和联合体与位段结合中的大小端
问题
...
移植驱动代码时发现工程中使用了如下形式的代码typedef struct BlkTestTag{uint16_tm_u1Var1;uint8_t reserve[2];uint32_tm_u4Var2;}BlkTest;uint8_t test_array[8] ={0x01,0x02,0x00,0x00,0x05,0x06,0x07,0x08};pblkTest = (BlkTest ...
C#
结构
体和字节
数组
的
转换
转自百度文库里的文章,本想下载下来的,但是分值实在太高,所以直接把代码抄了一遍,顺便当做练习。另外,还有一些东西不是很明白。 本文主要起源于项目从C++转到C#时碰到的
问题
,即套接字发送信息时的类型
转换
。 在C++中,套接字发送和接收的类型为字符
数组
char[],而char[]与
结构
体struct可以直接进行显式
转换
就可以; 在C#中,Sockets类和NetworkStream类发送和接收
数组
指针强制
转换
为
结构
体指针
前两天在看TI官方提供的BasicRF的源码时,发现一个看不懂的地方,就是将一个
数组
名强制
转换
为
结构
体指针,如下所示。 在上面的图片中,basicRfPktHdr_t是一个
结构
体,rxMpdu是一个长度为128个字节的
数组
名,pHdr是一个
结构
体指针。这让我很是清楚这么写是什么意思,因为以前从没有遇到,现在遇到了就算是进一步学习C语言了。 通过百度查...
一维
数组
转换
成树
结构
的
数组
一维
数组
转换
成树
结构
的
数组
,或者转成多节点的树
结构
,二维
数组
转换
为未知节点数的树
结构
数组
需要使用递归算法。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章