空指针操作
Operation on void pointer
已知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 指针的指针)。这是预期的行为吗?
Can you please explain the above behavior, where a double pointer (pointer to a void pointer is used). Is it expected behavior?
是的,这是预期的行为。
那是因为指针指向的对象的大小是已知的。是sizeof(void*)
.
如果指针的值用纯整数值表示,
(a + 1) == a + 1*sizeof(void*)
在您的平台上,sizeof(void*)
似乎是 8
。
已知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 指针的指针)。这是预期的行为吗?
Can you please explain the above behavior, where a double pointer (pointer to a void pointer is used). Is it expected behavior?
是的,这是预期的行为。
那是因为指针指向的对象的大小是已知的。是sizeof(void*)
.
如果指针的值用纯整数值表示,
(a + 1) == a + 1*sizeof(void*)
在您的平台上,sizeof(void*)
似乎是 8
。