我必须向数组中写入一些文字,但是我只有数组的地址,因此我要先创建一个本地数组,再用文字填充它,然后将内容复制到目标数组中。这是一个例子:

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/

10-11 02:22