#include <stdio.h>
int main(void)
{
void *ptr;
int arr[] = {1,2,3,4,5};
ptr = arr;
ptr++;
printf("%d",*(int*)ptr);
}
打印一些垃圾的价值,但我期待它打印2
。为什么不打印2
?
#include <stdio.h>
int main(void)
{
void *ptr;
int arr[] = {1,2,3,4,5};
ptr = arr;
ptr++;
printf("%d",*(int*)ptr);
}
打印一些垃圾的价值,但我期待它打印2
。为什么不打印2
?
一些C编译器将char *作为void指针算术。它在C++中无效。
无论如何,你真的应该只是递增非void指针,因为指针算术依赖于数据类型大小和对齐的知识。
您无法对void指针执行指针运算,因为编译器对指向对象的大小没有任何意见。
您的代码不会在线上在线上编译。它是我猜想的另一个邪恶的gcc扩展。
我认为gcc在执行算术时将'void *'视为'char *'。 – GManNickG 2011-05-26 07:01:21
@GMan(和@Prasoon) - 这里有一些信息:[Pet Peeves:尝试增加空指针的人](http://talideon.com/weblog/2007/10/no-inc-voidp.cfm );另请参阅[GCC文档](http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Pointer-Arith.html#Pointer-Arith)。 – detly 2011-05-26 07:10:10
@detly:感谢您的链接.. – 2011-05-26 07:13:03
你还不明白就行'PTR ++'编译错误? – Simone 2011-05-26 06:53:33