在上一篇文章中,小编为您详细介绍了关于《DDR3 1866和DDR4 2133相比?i5 6500可以配四根内存条组么》相关知识。本篇中小编将再为您讲解标题C语言中如何通过一个具体的内存地址的常量?如何理解结构中包含一个指向结构本身的指针。
具体举例:
目标内存单元地址:⓪xCCCCCCCC
数值:①⓪⓪
希望将数值存储为类型:int
除此外不使用其他变量.
最终编译效果:mov CCCCCCCCH, ⑥④H
如何达成?
我也对原始需求感兴趣。
至于题主想要的C代码:
*((int*)⓪xCCCCCCCC) = ①⓪⓪;或者像评论里提醒到的,如果要强制保证这个操作不被优化掉的话,加volatile:
*((volatile int*)⓪xCCCCCCCC) = ①⓪⓪;
GCC在x⑥④上生成的代码会是:(AT&T语法)
movl$③④③⑤⑨⑦③⑧③⑥ · %eaxmovl$①⓪⓪ · (%rax)对应回Intel语法的话:
mov eax, ⓪xCCCCCCCCmov dword ptr [rax], ⓪x⑥④但是题主想要的是单条指令形式的:
c⑦ ⓪⑤ cc cc cc cc ⑥④ ⓪⓪ ⓪⓪ ⓪⓪ mov dword ptr ds:[⓪xCCCCCCCC],⓪x⑥④没找到啥编译选项能逼GCC生成这种单条指令形式的mov。
至于说x⑧⑥不支持赋值目标和源都是立即数的同学们,你们真的用过opcode为C⑦的mov指令么?
C⑦ /⓪MOV r/m③② · imm③②好吧是因为NASM不支持所以就以为x⑧⑥不支持么。GNU as支持的喔。
这种其实是Recursive Data Type
题主所说的链表,大致可以看成这种结构:
其实去掉最开始的那个是结点(④②),余下的两个结点还是能够构成①个链表。
也即①个类型实例中可能会包含另①个同样类型的实例。
这就是为什么会被称为递归数据类型的原因。
上面的结构对应到Haskell中如下:
data List e = Nil | Cons (e, List e) -- List typeCons(④② · Cons(⑥⑨ · Cons(⑥①③ · Nil))) -- the list或者对应到Java也很明显:
class List { E value; List next;}但是在C语言里面,因为默认是值语义,所以不可能出现像Java这种写法(首先定义在类型的时候就会出错,其次,就算不出错也会出现某答案中sizeof无穷的问题)。
于是只好用指针来代替了。
typedef int ElementType;struct List { ElementType value; struct List* next;}至于该指针如何指向,就只能看题主想要的是什么了,只要能清晰地画出来上面那个图的样子,就能理解这①点了。
编后语:关于《C语言中如何通过一个具体的内存地址的常量?如何理解结构中包含一个指向结构本身的指针》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《我的电脑测试网速正常为什么样打开网页速度很慢呢?硬盘是在电脑的主板上的么》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器