这里有什么问题? (void type pointer)

时间:2014-06-05 11:18:19

标签: c pointers void

我知道有问题,但我不明白为什么。我是初学者。谢谢你的帮助!

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");
}

谢谢你们。

3 个答案:

答案 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