Basi c C Указатели - PullRequest
       4

Basi c C Указатели

0 голосов
/ 12 января 2020

По какой-то причине, когда я пытаюсь скомпилировать этот код в программе C, он возвращает мне ошибку. Я пытаюсь распечатать фактический адрес памяти переменной x. Если кто-нибудь знает, я буду признателен!

Код:

    int x = 7;
    printf("x is %d\n", x);

    x = 14;
    printf("x is %d\n", x);

    int *aptrx = malloc(sizeof(int));
    aptrx = &x;                  

    printf("aptrx is %x\n", aptrx);

Ошибка:

*pointer.c:12:29: error: format specifies type 'unsigned int' but the argument has type* 'int \*' [-Werror,-Wformat]

Ответы [ 3 ]

4 голосов
/ 12 января 2020

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

int *aptrx = malloc(sizeof(int));

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

int *aptrx = &x;

Затем попробуйте распечатать адрес, используя строку ниже, используя спецификатор формата % p .

printf("aptrx is %p\n", aptrx);
1 голос
/ 12 января 2020

Нет необходимости динамически выделять память для создания переменной-указателя.

int *aptrx = malloc(sizeof(int)); //unnecessary

Просто создайте переменную-указатель, как и любую другую переменную

int *aptrx = &x;

Чтобы распечатать значение указателя (т.е. адрес x), используйте спецификатор формата% p или% u:

printf("aptrx is %p\n", aptrx);
1 голос
/ 12 января 2020

У вас ошибка, потому что формат ожидает unsigned int, но аргумент - int *.

В руководстве для printf говорится о спецификаторе преобразования %x:

Аргумент unsigned int преобразуется [...] в шестнадцатеричное (x и X) представление без знака.

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

Аргумент указателя void * печатается в шестнадцатеричном формате (как будто% # x или% # lx).

Как это:

printf("aptrx is %p\n", aptrx);
...