【C/C++】知识点笔记
1 - 联合体内嵌结构体初始化赋值
union { struct { int i; float f; char *p; }; int o; } obj3 = { 1, 2.2, "sk", 4, 9 }; printf("struct inlay union: %d, %f, %s, %d\n", obj3.i, obj3.f, obj3.p, obj3.o);
输出:
struct inlay union: 1, 2.200000, sk, 1
说明:
a. 在union
中,所有的成员共享同一块内存空间。这意味着,在任何给定的时间,只有一个成员可以持有值。在上述代码中,union
的初始化是匿名的,所以是对其第一个成员(一个struct
)进行的。因此,o
成员并没有被初始化
b. 若要o
成员生效,就需要显示初始化,即 obj3 = { 1, 2.2, "sk", .o=4, 9 };
c. 初始化成员个数超过定义的成员个数,则超出的赋值会忽略,但还是建议按个数赋值
2 - C/C++内嵌汇编
Using Assembly Language with C (Using the GNU Compiler Collection (GCC))
__asm__ __volatile__( "assembly code" : output operands // 输出操作数 : input operands // 输入操作数 : clobbered registers // 受影响的寄存器列表 );
__asm__ __volatile__( "str sp,[%0] \n" "bx lr \n" : : "r"(®s), "r"(sp_saved) : "r0" );
说明:
a. str sp
,[%0]:表示将寄存器sp
中的值存储到内存地址[%0]
中。[%0]
是通过第一个输入操作数®s
指定的内存地址。
b. bx lr
:表示执行跳转到寄存器lr
所指向的地址,\n
分割汇编指令。
c. : "r"(®s), "r"(sp_saved)
:这是输出操作数和输入操作数的部分。
c.1 "r"(®s)
:表示将®s
的地址存储到一个寄存器中,供汇编代码使用。
c.2 "r"(sp_saved)
:表示将sp_saved
的值存储到另一个寄存器中,供汇编代码使用。
d. : "r0"
:这是受影响的寄存器列表,表示在内嵌汇编代码执行过程中可能会修改寄存器r0
的内
再牛逼的梦想也架不住傻逼似的坚持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧