Распечатайте адрес или указатель для значения в C

Шаблоны проектирования являются признаком дизайна языка программирования каменного века

Они имеют свое назначение. С ними создается много хорошего программного обеспечения. Но тот факт, что была необходимость кодифицировать эти «рецепты» для психологических абстракций о том, как ваш код работает / должен работать, говорит о нехватке языков программирования, достаточно выразительных, чтобы справиться с этой абстракцией для нас.

Решение, я думаю, заключается в языках, которые позволяют вам встраивать все больше и больше дизайна в код, определяя языковые конструкции, которые могут не существовать или не иметь общей применимости, но на самом деле действительно имеет смысл в ситуациях, с которыми постоянно сталкивается ваш код. Люди Схемы знали это годами, и с помощью макросов Схемы есть вещи, которые заставили бы большинство наемных обезьян мочиться в штаны.

77
задан jww 14 October 2018 в 10:21
поделиться

5 ответов

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

29
ответ дан 24 November 2019 в 11:00
поделиться

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

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

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

14
ответ дан 24 November 2019 в 11:00
поделиться

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

printf("%p",emp1)

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

printf("%p",*emp1)

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

38
ответ дан 24 November 2019 в 11:00
поделиться

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

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);
9
ответ дан 24 November 2019 в 11:00
поделиться

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

0
ответ дан 24 November 2019 в 11:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: