Подтвердить что ты не робот

Печать адреса указателем содержит в C

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

Я работаю на C, и у меня есть два указателя; Я хочу напечатать содержимое указателя. Я не хочу разыгрывать указатель, чтобы получить указанное значение, я просто хочу, чтобы указатель хранился.

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

/* item one is a parameter and it comes in as: const void* item1   */
const Emp* emp1 = (const Emp*) item1; 

printf("\n comp1-> emp1 = %p; item1 = %p \n", emp1, item1 );

Пока я публикую это (и причина, по которой важно, что это правильно), я должен в конечном итоге сделать это для указателя на указатель. То есть:

const Emp** emp1 = (const Emp**) item1; 
4b9b3361

Ответ 1

То, что у вас есть, является правильным. Конечно, вы увидите, что emp1 и item1 имеют одинаковое значение указателя.

Ответ 2

Чтобы напечатать адрес в указателе на указатель:

printf("%p",emp1)

разыменовать один раз и распечатать второй адрес:

printf("%p",*emp1)

Вы всегда можете проверить с помощью отладчика, если вы используете Linux ddd и отображаете память, или просто просто gdb, вы увидите адрес памяти, чтобы вы могли сравнить со значениями в ваших указателях.

Ответ 3

Я считаю, что это было бы самым правильным.

printf("%p", (void *)emp1);
printf("%p", (void *)*emp1);

printf() - это вариационная функция и должны быть переданы аргументы правильных типов. В стандарте указано, что %p занимает void *.

Ответ 4

Поскольку вы уже, похоже, решили отобразить основной указательный адрес, вот как бы вы проверили адрес двойного указателя:

char **a;
char *b;
char c = 'H';

b = &c;
a = &b;

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

printf("a points at this memory location: %p", a);
printf("which points at this other memory location: %p", *a);

Ответ 5

char c = 'A';
printf("ptr: %p,\t value: %c,\t and also address: %zu",&c, c,&c);

результат:

ptr: 0xbfb4027f, значение: A, а также адрес: 3216245375

Ответ 6

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