Рассмотрим следующий фрагмент кода:Указатель Арифметика В C
int (*p)[3];
int (*q)[3];
q = p;
q++;
printf("%d, %d\n", q, p);
printf("%d\n", q-p);
Я знаю, что арифметика указателей умна, а это означает, что операция q++
достижения q
достаточно байт вперед, чтобы указать на следующий 3-х целых чисел массива, так это не удивляет меня, что первая печать «12, 0
», что означает, что увеличивающиеся q
сделал больше в 12
Но вторая печать делает меня удивляет. Он печатает 1!
Так зачем же печатать 1 вместо 12? это просто озадачивает меня.
Так что нет способа взять два указателя и получить разницу в байтах? –
Нарисуйте указатели на (char *), тогда вы получите разницу в байтах. –
@Leif: Или просто умножьте разницу на sizeof (your_type). –