Ответ 1
Использовать спецификатор формата адреса указателя %p
:
printf("Address: %p\n", (void *)temp);
У меня есть функция, которая возвращает адрес следующим образом
struct node *create_node(int data)
{
struct node *temp;
temp = (struct node *)malloc(sizeof(struct node));
temp->data=data;
temp->next=NULL;
printf("create node temp->data=%d\n",temp->data);
return temp;
}
где struct node -
struct node {
int data;
struct node *next;
};
Как я могу видеть в printf ("") адрес, хранящийся в temp?
UPDATE
Если я проверю адрес в gdb, адреса поступают в шестнадцатеричном формате, т.е.
0x602010, где один и тот же адрес в printf("%p",temp)
приходит в другом количестве, которое отличается от того, что я видел в команде печати gdb.
Использовать спецификатор формата адреса указателя %p
:
printf("Address: %p\n", (void *)temp);
EDIT: Не делай этого! Он печатает адрес указателя, а не то, что вы хотите!
У меня были всевозможные проблемы, чтобы заставить это работать, но здесь кое-что, на что компилятор (я использую простую командную строку "cc" unix) не жаловалось и, казалось, давало надлежащие результаты:
struct node temp;
// ... whatever ...
printf ("the address is %p", &temp);
[Вместо того, чтобы удалять, я оставил это как пример того, что НЕ нужно делать. -smb]
enter code here
#include<stdio.h>
struct anywhere
{
double a;
int b;
char c;
float d;
}g;
int main()
{
printf("%p\n%p\n%p\n%p\n",&g.a,&g.b,&g.c,&g.d);
return 0
}
теперь мы можем получить вывод: адрес г.а.а наоборот
мы можем напечатать адрес структурной переменной следующим образом а также о том, как происходит заполнение в структурах, мы можем увидеть, напечатав адрес каждого члена.
Спасибо вам всем любые ошибки и предложения, пожалуйста, пинг комментарий.