LINUX.ORG.RU

История изменений

Исправление Stanson, (текущая версия) :

Тут можно прямо конкурс устраивать: кто объяснит, суть

Так очень удобно и просто делать заголовки к каким-нибудь строкам и прочим массивам/структурам, которые хочется скармливать функциям, понимающим только просто массив/структуру без всяких там заголовков. А если вдруг понадобится заголовок, то нужно просто вычесть его размер из адреса массива/структуры. Что собственно и делается - кастуем указатель на массив/структуру в указатель на заголовок и вычитаем единицу. Можно просто написать что-то типа ((char*)data_addr - sizeof(struct header)), но чтобы не пугать обывателя ужасной адресной арифметикой в явном виде, можно написать и &(((struct header *)data_addr)[-1]). Так, наверно, даже красивше и немного короче будет.

Исходная версия Stanson, :

Тут можно прямо конкурс устраивать: кто объяснит, суть

Так очень удобно и просто делать заголовки к каким-нибудь строкам и прочим массивам/структурам, которые хочется скармливать функциям, понимающим только просто массив/структуру без всяких там заголовков. А если вдруг понадобится заголовок, то нужно просто вычесть его размер из адреса массива/структуры. Что собственно и делается - кастуем указатель на массив/структуру в указатель на заголовок и вычитаем единицу. Можно просто написать что-то типа ((char*)data_addr - sizeof(struct header)), но чтобы не пугать обывателя ужасной адресной арифметикой в явном видет, можно написать и &(((struct header *)data_addr)[-1]). Так, наверно, даже красивше и немного короче будет.