需要发生以下输出的原因

时间:2014-10-26 15:58:31

标签: c

 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;
   }
  }

此代码将输出显示为:Garbage值。怎么样和为什么?

1 个答案:

答案 0 :(得分:0)

printf()函数返回一个整数。成功后,返回值是写入的字符数。如果出错,返回值为负。

因为printf("%d")printf("%d",printf("%d"))的内部一个)将首先被执行,所以它很可能会显示一个内存位置的随机值。之后printf("%d",printf("%d"))将打印上次调用期间写入的值的数量。

示例:123456789010