众所周知,无效指针airthmetic是无效的.
int main {
int b = 10;
void *a = (void *) &b;
void *c = a + 1;
printf ("%p\n", a);
printf ("%p\n", c);
}
Output:
0x7fff32941d1c
0x7fff32941d1d
Run Code Online (Sandbox Code Playgroud)
我已经读过上面的airthmetic是意想不到的行为,我们不能依赖它.
现在转向实际问题.我正在使用一系列void指针.
int main()
{
void *a[10];
void **b = a;
void **c = (a + 1);
printf ("%p\n", b);
printf ("%p\n", c);
}
Output:
0x7fff8824e050
0x7fff8824e058
Run Code Online (Sandbox Code Playgroud)
你能解释一下上面的行为,其中有一个双指针(使用指向void指针的指针).这是预期的行为吗?
你能解释一下上面的行为,其中有一个双指针(使用指向void指针的指针).这是预期的行为吗?
是的,这是预期的行为.
那是因为指针指向的对象的大小是已知的.是的sizeof(void*).
如果指针的值以纯粹的整数值表示,
(a + 1) == a + 1*sizeof(void*)
Run Code Online (Sandbox Code Playgroud)
看来,在您的平台上,sizeof(void*)是8.