Шаблоны проектирования являются признаком дизайна языка программирования каменного века
Они имеют свое назначение. С ними создается много хорошего программного обеспечения. Но тот факт, что была необходимость кодифицировать эти «рецепты» для психологических абстракций о том, как ваш код работает / должен работать, говорит о нехватке языков программирования, достаточно выразительных, чтобы справиться с этой абстракцией для нас.
Решение, я думаю, заключается в языках, которые позволяют вам встраивать все больше и больше дизайна в код, определяя языковые конструкции, которые могут не существовать или не иметь общей применимости, но на самом деле действительно имеет смысл в ситуациях, с которыми постоянно сталкивается ваш код. Люди Схемы знали это годами, и с помощью макросов Схемы есть вещи, которые заставили бы большинство наемных обезьян мочиться в штаны.
То, что у вас есть, верно. Конечно, вы увидите, что emp1 и item1 имеют одинаковое значение указателя.
Я считаю, что это было бы наиболее правильным.
printf("%p", (void *)emp1);
printf("%p", (void *)*emp1);
printf ()
- это функция с переменным числом аргументов, и ей необходимо передавать аргументы правильного типа. Стандарт говорит, что % p
принимает void *
.
Чтобы напечатать адрес в указателе на указатель:
printf("%p",emp1)
, чтобы разыменовать один раз и распечатать второй адрес:
printf("%p",*emp1)
Вы всегда можете проверить с помощью отладчика, если вы используете Linux, используйте ddd
и отображать память, или просто gdb
, вы увидите адрес памяти, чтобы вы могли сравнить со значениями в ваших указателях.
Поскольку вы, похоже, уже решили отображение адреса основного указателя, вот как вы можете проверить адрес двойного указателя:
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);
Я был в этом положении, особенно с новым оборудованием. Я предлагаю вам написать небольшую подпрограмму дампа в шестнадцатеричном формате. Вы сможете увидеть все данные и адреса, по которым они находятся. Это хорошая практика и вселяет уверенность.