2016-09-08 5 views
3
void main() 
{ 
printf("Adi%d"+2,3); 
} 

выход = i3Как работает printf в приведенном ниже коде?

Это Printf заявление работала, но как оператор работал?

+4

Это не является примером для подражания. –

+0

Теперь почему это работает? 'printf (& 2 ?? (" Adi% d ":>, 010-05);' Тот же тип бессмысленного вопроса обфускации. – Lundin

+0

Note [Что должно быть 'main()' return in C и C++?] (http: // stackoverflow.com/questions/204476/) –

ответ

8
printf("Adi%d"+2,3); 

"Adi%d" - интерпретируется как начало адреса памяти, где строка символов "Adi%d" хранится. Когда вы добавляете 2 к нему, он становится адресом памяти, где хранится строка "i%d". Итак, в основном вы передали строку printf: "i%d". Затем %d и printf вошли в игру вместо %d с 3, следовательно, выход i3.

1

Его часть указателя на символ, ничего не делать с Printf, "Adi" + 2 сделает чтение из положения 0 + 2 = 2, которые будут i

int main() 
{ 
    char* a = "Adi" + 2; 
    printf(a); // output i 

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