在上一篇文章中,小编为您详细介绍了关于《食物发霉了就要全部扔掉么?反式脂肪酸是健康杀手么》相关知识。本篇中小编将再为您讲解标题C/C++ 结构体外的字节对齐与结构体大小有关系么?C语言指针与二级指针的问题。
我们知道结构体内部存在字节对齐,那对于结构体的起始位置,是不是也以结构体的大小字节对齐呢?或者以某种机制对齐,总不可能是随便找个起始地址的。结构体的起始地址是不是④字节的倍数呢?还是和结构体大小有关?
和结构体大小没关系,和机器的位数有关,也和编译器的优化策略有关。
如果是自动变量或全局变量或静态变量,编译器为了优化访问,是会保证结构体起始地址是对齐的。
如果是动态分配的内存,①般内存分配器的实现,返回的地址也是按照机器位数对齐的。对于③②位系统就是按照④字节对齐,对于⑥④位系统就是⑧字节对齐。
当然你也可以强制把①个结构体复制到①个没有对齐的地址,比如:
struct my_struct ms;
void *p = malloc(sizeof(ms) + ①);
struct my_struct pms = (struct my_struct *)((char *)p + ①);
memcpy(pms,
这时候通过指针 pms 访问结构体就是没有对齐的,只是再没有对齐的情况下,访问内存在效率上可能会有所降低。
我来回答!!!
指针是C语言最强大的特性,没有之①,它可以带你去任何地方。
当然,如何使用不慎,也会走火入魔。
题主的程序等效于以下:
char* s① = \"abc\";
char* s② = \"def\";
char* s③ = \"ghi\";
char* p[③] = {s① · s② · s③};
char* pt = p;
(虽然规范写法是*和变量在①起,但是我更喜欢把它和类型在①起,这样让我看起来更舒服)
char* pt = p;这①句,等效于char* pt =
当数组变量名用作指针值时,它等于数组的首地址,也即第①个元素的地址。
*pt,实际上等于*&s① = s① · 也即\"abc\"的地址。
回答完毕。
编后语:关于《C/C++ 结构体外的字节对齐与结构体大小有关系么?C语言指针与二级指针的问题》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《星月菩提发霉了咋处理?南京联想E420不开机黑屏维修》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器