可能重复:
void*算术
嗨伙计们,我有一个关于C中指针增量的小问题.首先我要知道,指针将ptr++在哪里ptr增加sizeof(*ptr).我也知道*ptr,在编写时,编译器知道它必须sizeof(*ptr)从内存中获取字节.
第二部分帮助我理解为什么以下甚至不编译:
int main(){
int a = 3;
void* b = &a;
printf("%d\n", *b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为编译器不知道类型变量的大小void.但是,我对以下代码有点困惑:
int main(){
int a = 3;
void* b = &a;
printf("%p\n", b);
b++;
printf("%p\n", b);
}
Run Code Online (Sandbox Code Playgroud)
所以,我的两个问题是:
编译器如何知道它应该增加b多少?
为什么它只增加一个字节(至少在我的机器中是一个字节)?
1)它没有,2)那是未定义的行为.void是一个不完整的类型,因此它没有明确定义的大小,因此您不能使用其指针进行指针运算.
通常,您需要char指向字节方式内存摆弄的指针.
如果在启用所有编译器警告的情况下进行编译,则会发现此类有问题的代码.
| 归档时间: |
|
| 查看次数: |
3319 次 |
| 最近记录: |