Указатель не будет работать в функции printf()

возникли проблемы с печатью пойнтер. Каждый раз, когда я пытаюсь скомпилировать программу, я получаю следующую ошибку:

pointers.c:11: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int *’

Я, очевидно, упускаю что-то простое здесь, но из других экзаменов подобного кода, которые я видел, это должно работать.

вот код, любая помощь будет здорово!

#include <stdio.h>

    int main(void)
    {
       int x = 99;
       int *pt1;

       pt1 = &x;

       printf("Value at p1: %d\n", *pt1);
       printf("Address of p1: %p\n", pt1);

       return 0;
    }

4 ответов


просто наведите указатель int на пустоту:

printf( "Address of p1: %p\n", ( void * )pt1 );

ваш код является безопасным, но вы компилируете с -Wformat предупреждение, что типа регистрация звонков printf() и scanf().


обратите внимание, что вы получаете простое предупреждение. Ваш код наверное выполнить, как ожидалось.

на "%p" спецификатор преобразования в printf ожидает


в этом случае компилятор просто немного перестарался с предупреждениями. Ваш код абсолютно безопасен, вы можете убрать предупреждение с:

printf("Address of p1: %p\n", (void *) pt1);

в сообщении говорится все, но это просто предупреждение, а не ошибка как таковая:

printf("Address of p1: %p\n", (void*)pt1);