Я перечитывал исходный код pngquant ( здесь )
Я запутался, когда увидел, что плюс-равно приписывает новое значение массиву структур (base += r
в приведенном ниже фрагменте кода):
static void hist_item_sort_range(hist_item base[], unsigned int len, unsigned int sort_start)
{
for(;;) {
const unsigned int l = qsort_partition(base, len), r = l+1;
if (l > 0 && sort_start < l) {
len = l;
}
else if (r < len && sort_start > r) {
base += r; len -= r; sort_start -= r;
}
else break;
}
}
Определение hist_item
имеет вид:
typedef struct {
f_pixel acolor;
float adjusted_weight, // perceptual weight changed to tweak how mediancut selects colors
perceptual_weight; // number of pixels weighted by importance of different areas of the picture
float color_weight; // these two change every time histogram subset is sorted
union {
unsigned int sort_value;
unsigned char likely_colormap_index;
} tmp;
} hist_item;
Я заранее извиняюсь, потому что я уверен, что те, кто взнать, что это, должно быть, очень глупый вопрос, но как работает плюс-равно на base
, который выглядит как массив структур и некоторое целое число r
?Мне кажется, что эта операция должна быть неопределенной для комбинации этих двух типов.
Мне не приходилось писать C почти десять лет, и я, по общему признанию, довольно ржавый;однако, поиск в течение приблизительно тридцати минут только нашел ответы на неправильные вопросы, и любая помощь приветствуется.Спасибо!