我认为我对指针算法的语义相当了解,但在处理数组时我只看到过例子.是否有任何其他用途不能通过不透明的手段实现?我相信你可以找到一种巧妙的方法来使用它来访问结构的成员,但我不知道为什么你会打扰.我最感兴趣的是C,但我会用C++标记,因为答案可能也适用于那里.
根据到目前为止收到的答案进行编辑:我知道指针可以在许多非数组上下文中使用.我特别想知道关于指针的算术,例如递增,有所作为等.
Gre*_*ill 10
如果遵循字母的语言标准,那么指针算法仅在指向数组时定义,而不是在任何其他情况下定义.
指针可以指向数组的任何元素,或者一个步骤过去的数组的末尾.
R..*_*R.. 10
C中定义的指针算法仅在数组上发生.但是,由于每个对象都有一个由重叠数组组成的表示unsigned char [sizeof object],因此对该表示执行指针算法也是有效的.例如:
struct foo {
int a, b, c;
} bar;
/* Equivalent to: bar.c = 1; */
*(int *)((unsigned char *)&bar + offsetof(struct foo, c)) = 1;
Run Code Online (Sandbox Code Playgroud)
实际上char *也可以.
a[n]是"只是"语法糖*(a + n).对于lulz,请尝试以下操作
int a[2];
0[a] = 10;
1[a] = 20;
Run Code Online (Sandbox Code Playgroud)
因此有人可能认为索引和指针算法只是可互换的语法.