2014-12-25 2 views
1

Я пытаюсь понять кусок кода ниже Но я не мог решить, (особенно)в с, что означает SizeOf() .. [- 1]

void fun(char **p) 
{ 
    char *t; 
    t = (p+= sizeof(int))[-1]; //especially this line,why there is "-1" in here? 
    printf("%s\n", t); 
} 

спасибо за ваше время.

+0

запомнить 'a [i]' == '* (a + i)' –

+1

'sizeof (int)' скорее всего ошибочен. По крайней мере, я не понимаю, почему было бы целесообразно увеличить указатель на тип указателя на 'int' много полей. Я подозреваю, что это должно быть 'p + = 1'. – bitmask

ответ

5

The

t = (p+= sizeof(int))[-1]; 

можно переписать в виде

p += sizeof(int); /* The logic of this doesn't make a whole lot of sense to me */ 
t = *(p - 1); 

Надеется, что это очищает вещи.

+1

Вы уверены? Обратите внимание, что это 'char ** p'. – unwind

+0

@unwind: Oh. Хорошо заметили, спасибо. Ответ переписан. – NPE

Смежные вопросы