在现代处理器中,可以从内存中加载一个寄存器,然后将索引指针修改为所需的值。例如,在我们的嵌入式处理器中,这将通过以下方式完成:
ldr r0, [r1], +12
这意味着 - 将 r1 指向的值加载到 r0 中,然后将 r1 增加 12:
r0 = [r1]
r1 = r1 + 12
在 C 语言中,使用指针算法,可以使用指针赋值,然后将指针前移 1:
char i, *p, a[3]={10, 20, 30};
p = &(a[0]);
i = *p++;
// now i==10 and p==&(a[1]).
我正在寻找一种方法来取消引用指针,同时通过一个非 1 的偏移量对其进行后期修改。这在 C 中是否可行,所以它可以很好地映射到类似的 asm 指令?
注意:
i = *p+=2;
在不修改指针的情况下增加 a[0] 中的值,并且:
i = *(p+=2);
预修改指针,所以在这种情况下i==30
.