указатель разыменования балагурусы - PullRequest
0 голосов
/ 25 июня 2019

В чем проблема с разыменованием указателя, когда не разыменование указателя при необходимости. Код приведен ниже. в чем здесь ошибка, не в состоянии понять. Приведено в балагурусамой книге Анси ц.

int *p,m=100 ;
p = &x ;
printf("%d",p) ;/*error*/

1 Ответ

2 голосов
/ 25 июня 2019

Исправление нескольких вещей в коде:

#include <stdio.h>

int main(void)
{
    int *p, m = 100, x = 10;
    p = &x; // In words, making 'p' to point to the address of 'x'
    printf("Address %p contains a value %d..", (void *)p,   *p);
    //              ^^                         ^^^^^^^^^    ^
    //              Using the correct          Typecasting  Dereferencing
    //              format specifier           the pointer  the pointer
    //              
    // Some code
    return 0;
}

Генерируемый выход:

Address 0x7ffdf396c128 contains a value 10..

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

Пояснение:

  • x не был определен в предоставленном вами фрагменте
  • Когда указатель используется для указания на совместимый тип данных, вы можете напечатать значение, разыменовав указатель.
  • Если вы хотите напечатать значение самого указателя, вам нужно сначала привести его к void, а затем использовать спецификатор формата %p вместо использования %d.
  • Список общего спецификатора формата в программировании на C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...