我必须向数组中写入一些文字,但是我只有数组的地址,因此我要先创建一个本地数组,再用文字填充它,然后将内容复制到目标数组中。这是一个例子:
void example(char *array) {
char temp[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
memcpy(array, temp, sizeof(temp));
}
这工作得很好,但是我正在寻找一种方法来在一行而不是两行中执行相同的操作。有谁知道如何做到这一点?
最佳答案
我把这个答案记下来了,因为您评论说您希望在一行中完成此操作,以避免不得不“访问多个指针”。但是你不会。任何体面的编译器都会对此进行优化。对于您的示例,带有-O1
的GCC会在x86_64
上生成此代码,并且保持不变。它甚至不调用memcpy
:
example:
.LFB12:
.cfi_startproc
movb $1, (%rdi)
movb $2, 1(%rdi)
movb $3, 2(%rdi)
movb $4, 3(%rdi)
movb $5, 4(%rdi)
movb $6, 5(%rdi)
movb $7, 6(%rdi)
movb $8, 7(%rdi)
ret
.cfi_endproc
解释一下:
$1
,$2
等是文字的元素,%rdi
是包含example
的第一个参数的寄存器,即名为array
的指针。只需使用两条可读行即可。
关于c - 使用指向文字的指针访问指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28607823/