关于C程序设计的指针

时间:2018-09-21 17:51:57

标签: c pointers

请,如果有人知道这是什么问题告诉我

#include"stdio.h"

void main() {
    int a = 10;
    int* p = &a;
    void** q = &p;
    printf("memory address=%d\n",(int*)*q);
}

这是编译器错误:

  

警告:从不兼容的指针初始化   类型[-Wincompatible-指针类型]        无效** q =&p;

     

ptr3.c:7:25:警告:格式为'%d'的类型为'int'的参数,但是   参数2的类型为'int '[-Wformat =] printf(“内存   地址=%d \ n“,(int )* q);                           〜^ ~~~~~~~~~                           %ls

编译器是否想说我不能使用int指针指向void类型的指针?

1 个答案:

答案 0 :(得分:1)

  

编译器是否想说我不能使用   空指针?

void ** q的类型为void **,而int * p的类型为int *。因此,以下行:void ** q = &p;由于类型不兼容,因此向编译器发出警告。

如果您将&p强制转换为void *,则问题中的警告将消失:void ** q = (void *)&p;

此行:printf("memory address=%d\n",(int*)*q);也应引起编译器警告,因为(int *)*q的类型为int *,但是%d格式说明符期望的是int。如果您使用格式说明符%p,则该警告也会消失。