有没有办法获得指向匿名结构的指针?有了匿名结构,我可以写下面的内容:
struct a{
int z;
};
struct b{
int y;
struct a *x;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我只struct a
在内部使用,struct b
并且用它来污染全局命名空间似乎是多余的.有没有办法可以x
为匿名结构定义指针().可能如下所示的东西:
struct b{
int y;
struct {
int z;
} *x;
}
Run Code Online (Sandbox Code Playgroud)
或者这本身有效吗?
我有一个基本程序,我只是为了测试写入文件.它应该将文件(out.txt)中的每个值从0到255放入char中.但是,当我在十六进制编辑器中打开out.txt时,第11个字节应该是0A,但它是0D.从这里开始,每个其他值都被推回,因此第12个字节为0A,第13个字节为0B,一直到第256个为FE而不是FF,就像它应该的那样.我正在使用Windows 10上的Visual Studio 2017编译和运行我的代码,如果它有帮助的话.
main.cpp中
#include <iostream>
#include <stdio.h>
#include <fstream>
int main(){
std::ofstream f("out.txt",std::ios::out);
for(int i = 0; i < 255; i++){
f << (char)i;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
out.txt(十六进制值)
00 01 02 03 04 05 06 07 08 09 0D 0A 0B 0C 0D 0E
0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E
1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E
2F …
Run Code Online (Sandbox Code Playgroud) 我在 x64 上用汇编编程,我打算在堆栈中推送一个地址。我打算编写push %rsp
,但是,由于此指令更改了 的值%rsp
,我不确定将推送什么值。
具体来说,如果我运行以下命令:
movq $0x10, %rsp
pushq %rsp
Run Code Online (Sandbox Code Playgroud)
内存地址是否0x8
包含0x10
或0x8
?这个处理器是依赖的还是所有 x64 处理器的标准?
我正在尝试组装一些 64 位代码,但组装失败了:
addq $0xffffff7fc0005000, %rax
Run Code Online (Sandbox Code Playgroud)
有错误:
`add' 的错误操作数类型不匹配
第一个操作数是一个 64 位值,后者是一个应该组装好的寄存器。该指令前面有一个.code64
伪操作。我正在组装
x86_64-elf-as test.s -o test.o --64
Run Code Online (Sandbox Code Playgroud)
至于汇编器本身,当用--version
它调用时返回:
GNU assembler (GNU Binutils) 2.32
Copyright (C) 2019 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `x86_64-elf'.
Run Code Online (Sandbox Code Playgroud)