Как печатать переменные адреса в C?
Когда я запускаю этот код.
#include <stdio.h>
void moo(int a, int *b);
int main()
{
int x;
int *y;
x = 1;
y = &x;
printf("Address of x = %d, value of x = %d\n", &x, x);
printf("Address of y = &d, value of y = %d, value of *y = %d\n", &y, y, *y);
moo(9, y);
}
void moo(int a, int *b)
{
printf("Address of a = %d, value of a = %d\n", &a, a);
printf("Address of b = %d, value of b = %d, value of *b = %d\n", &b, b, *b);
}
Я продолжаю получать эту ошибку в своем компиляторе.
/Volumes/MY USB/C Programming/Practice/addresses.c:16: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
/Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int **’
/Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’
/Volumes/MY USB/C Programming/Practice/addresses.c: In function ‘moo’:
/Volumes/MY USB/C Programming/Practice/addresses.c:23: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
/Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int **’
/Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’
Не могли бы вы мне помочь?
Спасибо
blargman
Ответы
Ответ 1
Вы хотите использовать %p
для печати указателя. Из спецификации:
p
Аргумент должен быть указателем на void
. Значение указателя преобразуется в последовательность символов печати в соответствии с реализацией.
И не забудьте бросить, например
printf("%p\n",(void*)&a);
Ответ 2
Когда вы собираетесь печатать адрес памяти любой переменной или указателя, использование %d
не будет выполнять задание и вызовет некоторые ошибки компиляции, поскольку вы пытаетесь распечатать число вместо адреса, и даже если это сработает, у вас будет ошибка намерения, потому что адрес памяти не является числом. значение 0xbfc0d878
, безусловно, не число, а адрес.
Что вы должны использовать, это %p
. например.
#include<stdio.h>
int main(void) {
int a;
a = 5;
printf("The memory address of a is: %p\n", (void*) &a);
return 0;
}
Удачи!
Ответ 3
Похоже, вы используете% p: Указатели печати
Ответ 4
Простой код, который печатает адреса переменных и их значения, а также как печатать переменные адреса или значения по-разному с помощью указателей.
#include<stdio.h>
#include<conio.h>
void main()
{
int i=3;
int*j,**k;
clrscr();
j=&i;
k=&j;
printf("\nAddress of i=%u",j);
printf("\nAddress of i=%u",*k);
printf("\nAddress of i=%u",i);
printf("\nAddress of j=%u",&j);
printf("\nAddress of j=%u",&k);
printf("\nAddress of j=%u",k);
printf("\nAddress of i=%d",i);
printf("\nAddress of i=%d",*j);
printf("\nAddress of i=%d",**k);
printf("\nAddress of j=%u",i);
printf("\nAddress of j=%u",*k);
printf("\nAddress of k=%u",k);
getch();
}
Надеюсь, вы понимаете.
Ответ 5
Чтобы напечатать адрес переменной, вам нужно использовать формат %p
. %d
для целых чисел со знаком. Например:
#include<stdio.h>
void main(void)
{
int a;
printf("Address is %p:",&a);
}