1

Тема: Вивід адреси

Взявся на свою голову вчити сі. Все наче виходить, але не дається мені одна цікава задача поки що. Є завдання вивести адресу змінної, зміст в шіснадцядковому вигляді і просто зміст функцією write. Зміст в шіснадцятковому вигляді і просто зміст можу вивести без проблем а от саму адресу не виходить. Я так розумію що треба записати значення адреси в змінну unsigned long int алеж стикаюсь з тим що значення виходить за рамки цього типу. От власне хотів би почути пораду або приклад як це можна зрозуміть та виконать

2

Re: Вивід адреси

Цілий тип, у який гарантовано влазить адреса, зветься size_t (визначено у <stddef.h>, але використовується в інших бібліотеках також). Використовується для визначення розміру об'єктів у пам'яті. Специфікатор розміру для форматованого виводу size_t - z (%zu чи %zx).
size_t беззнаковий, але має знаковий аналог - ptrdiff_t, який використовується, як можна здогадатися, для обчислення різниці між адресами.

Подякували: leofun01, Potaskun2

3

Re: Вивід адреси

Перепрошую, зачитався вашим рішенням і не написав правильного.
Для виведення покажчиків є окремий специфікатор - %p. Не треба нікуди його перетворювати.

Подякували: leofun01, Potaskun2

4

Re: Вивід адреси

Секрет полягає в тому що мені потрібно написати функцію тільки використовуючи функцію write і не використовуючі інші бібліотеки хоча може і помиляюсь... А без використання типу size_t Це можливо зробити?

5

Re: Вивід адреси

А без використання типу size_t Це можливо зробити?

Звісно. Ідея size_t в тому, що розмір покажчика залежить від архітектури; на 32-бітних системах це 4 байти, на 64-бітних - 8 байтів. Вам, швидше за все, потрібен unsigned long long int, і саме так для вашої архітектури size_t і визначений.

Подякували: Potaskun1