【发布时间】:2015-05-05 05:49:19
【问题描述】:
已知空指针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 是出乎意料的行为,我们不能依赖它。
现在继续讨论实际问题。我正在使用一个 void 指针数组。
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 不是未定义的行为,它甚至不是有效的 C 语言并且不会编译。如果它编译,您使用的是非标准编译器设置,它将
void*算术视为char*。