2014-10-26 52 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

請堅持每個堆棧溢出文章中的一個主題。你的第二個例子與第一個完全無關。 – 2014-10-26 16:01:38

回答

0

printf()函數返回一個整數。成功後,返回值是寫入的字符數。錯誤時,返回值爲負值。

由於printf("%d")(內部的printf("%d",printf("%d")))將首先執行,它很可能會顯示一些隨機值的內存位置。之後,printf("%d",printf("%d"))將打印上次調用期間寫入的值的數量。

示例:123456789010