Ошибка при печати значения указателя в C - PullRequest
1 голос
/ 25 марта 2020

Мне пришлось напечатать значение указателя:

int *p = 0;
printf("%d", *p); 

Приведенный выше код вызывает исключение.

Поэтому я попытался printf("%d", p), и это сработало.

Почему он работал только без *?

1 Ответ

5 голосов
/ 25 марта 2020

Когда вы разыменовываете указатель p (как *p), вы разыменовываете нулевой указатель (вы пытаетесь получить значение, на которое указывает p, но оно фактически никуда не указывает). Это приводит к неопределенному поведению и очень часто к sh.

Когда вы используете обычный p, вы печатаете содержимое самой переменной указателя, а не значение того, куда она указывает , Но это также приводит к неопределенному поведению, потому что формат %d предназначен для печати значения int, а не значения int *. Несоответствующий спецификатор формата и тип аргумента UB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...