-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 + iscanf機能しますか (私は学習が遅いのですが)?

4

2 に答える 2

10

input + iで、inputは配列です。式で使用すると、配列の名前は配列の最初の要素へのポインターに変換されます。ポインターに追加iすると、配列のthinput要素へのポインターになります。同じことをより明確に記述する方法は、.i&input[i]

したがって、同等の scanf を記述する簡単な方法は次のとおりです。

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

ポイントは にinput[i]相当する式です*(input + i)

そして、式&input[i]は と同等&*(input + i)または単に(input + i)、つまり scanf が必要とするのは要素のアドレスiです

理解するには、10.2Pointersとを読んでくださいArrays。ポインター演算ポインター演算

于 2013-10-17T13:49:01.637 に答える
2

<array name>+ <integer>in 式は、関数が stdin からスキャンされた整数を配置するinput + iメモリ アドレスに評価されます。scanf()

于 2013-10-17T13:50:00.907 に答える