Спецификатор формата int * предупреждение - PullRequest
0 голосов
/ 21 мая 2018

Я написал простую программу на C с scanf & printf, например:

    int n;
    scanf("%d", &n);
    int result = 7 - n;
    printf("%d", &result);

и получил это предупреждение:

предупреждение: формат "% d" ожидает аргумент типа "int ', но аргумент 2 имеет тип' int * '[-Wformat =] printf ("% d", & result);

Я не понимаю, почему аргумент 2 имеет тип int * вместо int?Как я могу решить это?

1 Ответ

0 голосов
/ 21 мая 2018

result - целочисленная переменная.Если вы хотите напечатать его значение, используйте %d спецификатор формата и укажите аргумент только как result, а не &result.

. Этот

printf("%d", &result);

замените на

printf("%d", result);

Если вы хотите напечатать адрес переменной result, используйте спецификатор формата %p.

printf("%p", &result); /* printing address */

Edit: %p спецификатору формата нужен аргументтипа void*.

Таким образом, чтобы напечатать адрес result, приведите его как void*.например,

printf("%p", (void*)&result); /* explicitly type casting to void* means it works in all cases */

Спасибо @ajay за указание на это, я забыл добавить этот пункт.

...