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


80

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

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

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

Поки я публікую це (і тому важливо, щоб воно було правильним), мені врешті-решт потрібно зробити це для вказівника на вказівник. Це:


Написане вами правильно, з якою проблемою саме ви стикаєтесь?
Luca Matteis

Як я вже описував, я отримував результати, але не міг знати, чи були результати правильними, чи це дало мені сміття. Дон та інші особи (а також ви) підтвердили, що ці результати є дійсними.
Frank V

Відповіді:


29

Те, що у вас є, є правильним. Звичайно, ви побачите, що emp1 та item1 мають однакові значення покажчика.


1
Вони не будуть однаковими, якщо тип item1 є частиною багаторазового успадкування та / або є родоначальником Emp, залежно від того, як компілятор викладає кожен із класів, що складають тип item1.
Jim Buck

2
@Jim: Тег "С" свідчить про інше
Гастуркун,

1
@Jim: Гастуркун має рацію. Я працюю в C. Я повинен був це опублікувати.
Frank V

39

Щоб надрукувати адресу в покажчику на покажчик:

один раз переорієнтувати і надрукувати другу адресу:

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


16

Я вважаю, що це було б найбільш правильно.

printf()є варіатичною функцією і повинна передавати аргументи правильних типів. Стандарт каже, що %pбере void *.


Я б уявив, що їх підвищують? Не впевнений, хтось може пояснити?
RastaJedi,

4
Ні, після деяких досліджень, вони не просуваються автоматично. Акторський склад void *справді потрібен.
RastaJedi

10

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

Ви зможете отримати доступ до адреси подвійного вказівника a, виконавши:


printf("which contains this value: %c\n" **a);просто хотів додати, що ^. ^.
RastaJedi

4

результат:

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


0

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


3
за рахунок звучання невігластва - чи не могли б Ви докладніше розповісти про те, як хтось пише таку рутину?
Фейсал Валі

1
Також ця відповідь може більше підходити як коментар?
RastaJedi,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.