我知道有问题,但我不明白为什么。我是初学者。谢谢你的帮助!
int main()
{
int a = 5;
int* p = &a;
void* p2 = p;
printf("%d", (int)(*p2) );
return 0;
}
我也有这个问题:
int main ()
{
int a[3] = {1,2,3};
int *p = a;
if(++p == ++a)
printf("equal");
else
printf("not equal");
}
谢谢你们。
答案 0 :(得分:3)
在第一个代码中,(int)(*p2)
是错误的,因为您无法推迟void
指针。您首先需要将其投放到int*
,然后才推迟:*(int*)p2
在第二个代码中,你不能++a
因为a
是一个常量(指向数组的指针是常量,而不是数组中的数据)所以你可以&#39 ;改变它的价值。
答案 1 :(得分:1)
我认为你在第一个代码示例中遇到的问题是你试图在返回int *之前获取值(operator *) - 尝试先强制转换。
第二个代码是比较两个指针而不是值 - 和 ++ a类似于移动数组的开头 - 这是一个常量。
答案 2 :(得分:0)
正如您在第一个问题中看到的那样,您使用了通用指针,作为初学者,在使用通用指针时需要记住一些事项:
*We cannot de-reference generic pointer.
*We can find the size of generic pointer using sizeof operator.
*Generic pointer can hold any type of pointers like char pointer, struct pointer,array of pointer etc with a valid typecasting.
问题1我改写为:
int main()
{
int a = 5;
void* p = &a;
int *p2= (int *)p;
printf("%d", *p2 );
return 0;
}
和问题2:
int main ()
{
int a[3] = {1,2,3};
int *p = a;
if(++p == &a[1])
printf("equal");
else
printf("not equal");
}
此外,请参阅here