增加空白时的垃圾值*

时间:2011-05-26 06:51:25

标签: c pointers void-pointers

此代码:

#include <stdio.h>
int main(void)
{
   void *ptr;
   int arr[] = {1,2,3,4,5};
   ptr = arr;
   ptr++;
   printf("%d",*(int*)ptr);
}

打印一些垃圾值,但我希望它能打印2。为什么不打印2

3 个答案:

答案 0 :(得分:5)

您无法对void指针执行指针运算,因为编译器不知道指向对象的大小。

您的代码无法在线上编译。我猜它是另一个邪恶的gcc扩展。

答案 1 :(得分:4)

有些C编译器会将void指针算法视为char *。它在C ++中无效。

无论如何,你真的应该只增加非void指针,因为指针算法依赖于数据类型大小和对齐的知识。

答案 2 :(得分:-2)

int *ptr
在这种情况下,

ptr ++按int的大小递增