

授業の課題で出題された問題です。  
整数配列dataに対し、要素番号iの2乗をdata[i]に格納する手続きsqarrayを作成する問題で、自分は以下のようにプログラムしました。

[code]

    /*
    ex1401.c
    */
    
    #include <stdio.h>
    
    void sqarray(int data[], int size)
    {
      int i;
    for (i=0;i<size;i=i+1) {
    printf("%d ",&data[i]);
    }
    }
    
    void printIntArray(int a[], int size)
    {
      int i;
    for (i=0;i<size;i=i+1) {
    printf("%d ",a[i]);
    }
    printf("\n");
    }
    
    
    int main(void)
    {
      int data[100], n;
    
      printf("n=? ");
      scanf("%d", &n);
    
      sqarray(data, n);
      printIntArray(data, n);
    
    
    return 0;
    }
    
[/code]

しかし、以下のようなエラーを表示されました。

[code]

    ex1401.c: In function ‘sqarray’:
    ex1401.c:11:10: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
     printf("%d ",&data[i]);
             ~^   ~~~~~~~~
             %ls
    
[/code]

上記の指摘では、"%d"が"%ls"のようになるということだと思い、直してみたのですが、またエラーがでました。  
自分のプログラムはどのようなところがおかしいのでしょうか。


CC BY-SA 4.0
2019-11-03T16:10:30.250
60228
2019-11-03T16:29:39.767
2019-11-03T16:24:33.900
19110
36412
question
c
要素を2乗するプログラム


直すべきは `&data[i]` の方です。

> warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type
> ‘int *’

この警告は、引数には `int` 型の値を期待していたのに、実際には `int *`
型の値が渡されたということを注意するものです。ここでは（おそらくデバッグ用に？）配列 `data` の `i`
番目の要素を表示したいのでしょうから、`printf` に渡すべきは `&data[i]` ではなく `data[i]` です。`&data[i]` だと
`data[i]` のアドレスを渡すことになってしまいます。


CC BY-SA 4.0
2019-11-03T16:29:39.767
60229
2019-11-03T16:29:39.767
19110
60228
answer