【发布时间】:2017-02-12 03:52:47
【问题描述】:
为什么我们在指针运算中只能使用四个运算符(+、-、++、--)?既然是处理地址,它与内置硬件有什么关系吗?
由于数组使用相对寻址,因为我们增加地址来执行该操作,我认为这可能是单独使用这 4 个运算符的原因之一。
【问题讨论】:
-
您认为还有哪些其他运算符有意义?
-
@John3136:公平地说,
ptr % 8这样的东西实际上可能有用。 -
@KeithThompson:如果你知道这行得通,
int *p; ... uintptr_t boff = ((uintptr_t)p % 8);。p % 8可能对所有除数的所有架构都没有多大意义(例如,对于像 x86-16 位这样的段:偏移量移植器)。 -
运营商会怎么做?如果您使用指针进行乘法或除法或其他操作,结果会是什么?
-
@Olaf:我曾在可能会严重失败的系统上工作过。 (Cray 向量机。硬件地址是 64 位,指向一个 64 位字。编译器通过在高 3 位中存储偏移量来合成字节地址。指针和整数之间的转换只是复制了这些位。)如果@ 987654328@ 是由语言定义的(并且有很好的理由不这样做),然后编译器可以生成获得正确答案所需的任何代码。
标签: c linux pointers operators