此代码:
#include <stdio.h>
int main(void)
{
void *ptr;
int arr[] = {1,2,3,4,5};
ptr = arr;
ptr++;
printf("%d",*(int*)ptr);
}
打印一些垃圾值,但我希望它能打印2
。为什么不打印2
?
答案 0 :(得分:5)
您无法对void指针执行指针运算,因为编译器不知道指向对象的大小。
您的代码无法在线上编译。我猜它是另一个邪恶的gcc扩展。
答案 1 :(得分:4)
有些C编译器会将void指针算法视为char *。它在C ++中无效。
无论如何,你真的应该只增加非void指针,因为指针算法依赖于数据类型大小和对齐的知识。
答案 2 :(得分:-2)
试
int *ptr
在这种情况下,ptr ++按int的大小递增