NaaN日記

やったこと、覚えたことを発信する場

配列のポインタ(C)

コメントで教えてくださりありがとうございます。
表し方の数を増やしました。

これらは同じ意味
data[i]
*(data + i)
*(i + data)    //New!!
i[data]    //New!!

i[data]で表せることにビックリした

配列を書き換えられる
    int arr[5] = {1,2,3,4,5};
    printf("%d\n", arr[2]); //3
    data = arr;
    data[2] = 8; //他の書き方可
    printf("%d\n", arr[2]); //8
使ってみる
#include <stdio.h>
int main(void){
    int *data;
    int i;
    int sum = 0;
    int arr[5] = {1,2,3,4,5};
    
    data = arr;
    for(i = 0; i < 5; i++){
        sum += data[i]; //他の書き方可
    }
    printf("%d\n", sum); //15

    return 0;
}
上のfor文はこう書ける
    for(data = arr; data != &arr[5]; data++){
        //data = &arr[0]
        sum += *data;
    }
引数に配列を与える

色々書ける

型 hoge(型 配列名[要素数]);
型 hoge(型 配列名[]);
型 hoge(型 *配列名);

ポインタを理解しようと思って解いた問題の解答例がエラーばかりで悲しい