什么是scanf()中的<array name =“”> + <constant>?</constant> </array>

时间:2013-10-17 13:46:58

标签: c arrays pointers

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

#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是什么?这个程序是如何运作的(我是一个慢学习者)?

2 个答案:

答案 0 :(得分:10)

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

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

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

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

表达式&input[i]等同于&*(input + i)或仅(input + i),这就是scanf需要的i th 元素的地址。

了解阅读10.2 Pointers and Arrays; Pointer ArithmeticPointer Arithmetic

答案 1 :(得分:2)

表达式<array name>中的

<integer> + input + i求值为scanf()函数将stdin扫描整数放入的内存地址。