-2

好吧,我从朋友那里得到了一个代码。
我已经看了好几次代码。
我根本不理解它的过程和一些奇怪的语法。

#include <stdio.h>
int main(){
    int n, input[1000], i, j, k, max = 0;
    scanf("%d", &n);
    for(i = 0; i < n; i++){
       scanf("%d", input + i);
       if(input[i] > max) 
          max = input[i];
    }
   for(i = 1; i <= max; i++){
       for(j = 0; j < n; j++){
           if(input[j] + i <= max)
             for(k = 0; k < input[j] * 2; k++) 
                putchar(' ');
           else{
             for(k = 0; k < input[j]; k++){
                if(max - i == k)
                    putchar('/');
               else 
                    putchar(' ');
             }
             for(k = input[j] - 1; k >= 0; k--){
               if(max - i == k)
                    putchar('\\');
               else 
                    putchar(' ');
             }
         }
     }
     putchar('\n');
  }
  getch();
  return 0;    
}

input + i之后是什么scanf以及该程序如何工作(我是一个学习缓慢的人)?

4

2 回答 2

10

在表达式input + i中,input是一个数组。在表达式中使用时,数组的名称将转换为指向数组第一个元素的指针。添加iinput指针会导致指向数组i第 th 个元素的指针。编写相同内容的更清晰的方法是&input[i].

因此,编写等效 scanf 的简单方法是:

scanf("%d", &input[i]); 

点是表达式input[i]等价于*(input + i)

而 expression&input[i]等价于&*(input + i)or (input + i),也就是 scanf 需要的是i一个元素的地址。

要理解阅读10.2PointersArrays; 指针算术指针算术

于 2013-10-17T13:49:01.637 回答
2

<array name>+ <integer>in 表达式计算为函数将从标准输入中放入扫描的整数input + i的内存地址。scanf()

于 2013-10-17T13:50:00.907 回答