Страницы

Поиск по вопросам

пятница, 20 марта 2020 г.

Ошибка при работе с указателями

#c


#include  
#include  
#include 

void main() 
{ 
    int a, *p;

    scanf("%i", a);

    *p = &a;

    printf("%i", p);

    _getch(); 
}
    


Ответы

Ответ 1



#include #include #include void main() { int a = 0; int *p = NULL; scanf("%i", &a); p = &a; printf("%p\n", p); printf("%i\n", *p); _getch(); }

Ответ 2



В чистом виде пример выглядит так: #include void main() { int a, *p; scanf("%i", a); *p = &a; printf("%i", p); } Если собрать его с помощью gcc: $ gcc file.c -o file то компилятор выведет сообщение об предупреждениях: file.c:8: warning: format ‘%i’ expects type ‘int *’, but argument 2 has type ‘int’ file.c:10: warning: assignment makes integer from pointer without a cast file.c:12: warning: format ‘%i’ expects type ‘int’, but argument 2 has type ‘int *’ В них все и дело. Во первых, функции scanf и printf ожидают другой формат данных, отличный от того, который им подается. Во-вторых, адрес переменной присваивается не указателю, а целому, на которое указатель указывает.

Комментариев нет:

Отправить комментарий