对void指针的操作

时间:2015-05-05 05:49:19

标签: c pointers void

众所周知,无效指针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指针的指针)。这是预期的行为吗?

1 个答案:

答案 0 :(得分:6)

  

请解释上面的行为,其中有一个双指针(使用指向void指针的指针)。这是预期的行为吗?

是的,这是预期的行为。

那是因为指针所指向的对象的大小是已知的。它是sizeof(void*)

如果指针的值以纯整数值表示,

(a + 1) == a + 1*sizeof(void*)

在您的平台上,sizeof(void*)似乎是8