需要转换为通用指针

时间:2017-08-13 04:53:13

标签: c pointers

让我们考虑C语言中的以下两个程序

计划#1

#include<stdio.h>

int main ()
{
    int x = 5;
    int *px;

    px = &x;

    printf ("&x = %p\n", &x);
    printf ("px = %p\n", px);
    return 0;
}

计划#2

#include<stdio.h>

int main()
{
    int x = 5;
    int *px = NULL;

    px = &x;

    printf("&x  = %p\n", (void *)&x);
    printf("px  = %p\n", (void *)px);
    return 0;
}

编译完成后,我的两个程序都没有错误。但在编译#1 后,我收到以下警告

  

格式'%p'需要'void *'类型的参数,但参数2有类型   'int *'

在搜索堆栈交换之后,我得到了(void *)是一个通用指针,但我怀疑的是,我将px声明为int的指针变量,那么为什么我需要转换为泛型指针而不是(int *)。为什么%p无法在没有类型转换的情况下处理(void *)?

每当我打印地址或指针以获得零警告时,是否需要转换为通用指针?

0 个答案:

没有答案