2014-10-26 2 views
-1
main(){ 
    int a[5]={1,2,3,4,5}; 
    int *ptr=(int *)(&a+1); 
    printf("%d %d",*(a+1),*(ptr-1)); 
} 

Выходной сигнал этого кода составляет: 2 5. Я понимаю, почему 2, но почему 5 подходит для * (ptr-1)?Необходима причина появления следующего выхода

Кроме того,

main(){ 
    while(1) 
    { 
    if(printf("%d",printf("%d"))) 
     break; 
    else 
     continue; 
    } 
    } 

Этот код показывает вывод как: значение мусора. Как и почему?

+8

Пожалуйста, придерживайтесь одной темы на столбец переполнения стека. Второй пример полностью не связан с первым. –

ответ

0

printf() Функция возвращает целое число. После успеха возвращаемое значение - это количество написанных символов. И при ошибке возвращаемое значение отрицательно.

, так как сначала будет выполнено printf("%d") (внутреннее одно из printf("%d",printf("%d"))), это, скорее всего, покажет некоторое случайное значение местоположения памяти. После этого printf("%d",printf("%d")) напечатает количество значений, записанных во время предыдущего вызова.

Пример: 123456789010

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