<分区>
Possible Duplicate:
void * arithmetic
大家好,我有一个关于 C 中指针递增的小问题。首先,我知道 ptr++
,其中 ptr
是一个指针,它会递增大小(*指针)
。我还知道,在执行 *ptr
时,编译器知道它必须从内存中获取 sizeof(*ptr)
字节。
第二部分帮助我理解为什么以下甚至不能编译:
int main(){
int a = 3;
void* b = &a;
printf("%d\n", *b);
return 0;
}
因为编译器不知道void
类型变量的大小。但是,我对以下代码有点困惑:
int main(){
int a = 3;
void* b = &a;
printf("%p\n", b);
b++;
printf("%p\n", b);
}
所以,我的两个问题是:
编译器如何知道应该将
b
递增多少?为什么只增加一个字节(至少在我的机器上是一个字节)?