在 TypeScript 中,我有一个数组,我将其用作映射来访问另一个对象数组。这是我的代码的一个极其简化的示例:
var mp : Number[] = [1, 2, 0];
var arr : any[] = ['a', 4, /regex/];
console.log(arr[mp[2]])
Run Code Online (Sandbox Code Playgroud)
然而,运行这个会产生:
error TS2538: Type 'Number' cannot be used as an index type.
Run Code Online (Sandbox Code Playgroud)
我在其他地方查看过,但此类错误的其他答案并不涉及像数组和Number
. 如果不是Number
对象,如何索引数组?
为什么al包含汇编中的矢量参数数量?
为什么向量参数与被调用者的正常参数有任何不同?
使用stdarg.h,我只能拉一种类型,因为我必须知道我正在检索的类型.那么,printf如何设法成为任何类型的可变函数,在C中不会少?
在 gcc 汇编中,main 函数可以返回或退出,两者都起作用。这里我有两个程序,其中一个通过 syscall 退出int $0x80
,另一个只是调用 ret。有什么不同?
.data
hello: .string "Hello, World!"
.globl main
main:
push %rbx
movq $hello, %rdi
call puts
pop %rbx
ret
Run Code Online (Sandbox Code Playgroud)
和
.data
hello: .string "Hello, World!"
.globl main
main:
push %rbx
movq $hello, %rdi
call puts
pop %rbx
movq $1, %rax
movq $0, %rbx
int $0x80
Run Code Online (Sandbox Code Playgroud)
我知道 ret 将指令指针从堆栈中弹出,但是在这种情况下它到底有什么作用呢?
以下代码
int main() {
int arr[120];
return arr[0];
}
Run Code Online (Sandbox Code Playgroud)
编译成这样:
sub rsp, 360
mov eax, DWORD PTR [rsp-480]
add rsp, 360
ret
Run Code Online (Sandbox Code Playgroud)
知道整数是 4 个字节,数组的大小为 120,数组应该占用 480 个字节,但从 ESP 中只减去了 360 个字节......这是为什么?