对void指针的操作

Sum*_*han 2 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
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指针的指针).这是预期的行为吗?

R S*_*ahu 6

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

是的,这是预期的行为.

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

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

(a + 1) == a + 1*sizeof(void*)
Run Code Online (Sandbox Code Playgroud)

看来,在您的平台上,sizeof(void*)8.