众所周知,无效指针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
我已经读过以上airthmetic是意想不到的行为,我们不能依赖它。
现在转到实际问题。我正在使用一系列无效指针。
int main()
{
void *a[10];
void **b = a;
void **c = (a + 1);
printf ("%p\n", b);
printf ("%p\n", c);
}
Output:
0x7fff8824e050
0x7fff8824e058
请解释上面的行为,其中有一个双指针(使用指向void指针的指针)。这是预期的行为吗?
答案 0 :(得分:6)
请解释上面的行为,其中有一个双指针(使用指向void指针的指针)。这是预期的行为吗?
是的,这是预期的行为。
那是因为指针所指向的对象的大小是已知的。它是sizeof(void*)
。
如果指针的值以纯整数值表示,
(a + 1) == a + 1*sizeof(void*)
在您的平台上,sizeof(void*)
似乎是8
。