On Wed, Oct 19, 2005 at 10:04:00PM +0400, Dmitry V. Levin wrote: > On Wed, Oct 19, 2005 at 09:46:29PM +0400, Alexey Tourbin wrote: > > Такое впечатление, что происходит неправильный dereferencing, то есть > > rpmTagTable в качестве указателя уже смотрит непойми куда. Я озадачен. :) > > Это просто: > > 1. extern const struct headerTagTableEntry_s rpmTagTable[]; > Что такое символ rpmTagTable для приложения? > Это адрес, по которому находится первый элемент массива. Да. > 2. extern const struct headerTagTableEntry_s * rpmTagTable; > Что такое символ rpmTagTable для приложения? > Это адрес, по которому находится адрес первого элемента массива. Нет. И тот и другой -- адрес первого элемента массива. Только первый адрес константный, его нельзя менять (компилятор сразу может проставить сам этот адрес в код, но не проставляет). А второй адрес можно менять, компилятор обязан использовать косвенную адресацию. Впрочем, я не до конца понимаю, что там делает компилятор. С точки зрения самого языка Си эти две записи идентичны. Нужно посмотреть, что там `gcc -S' показывает, но лень. Но может посмотрю. :)