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