読者です 読者をやめる 読者になる 読者になる

追記・配列はポインタ?

c/c++

みずしまさんからの指摘をうけて追記、

int array[] が int *arrayの構文糖衣であることや、
式array[i] が、*(array + i)の構文糖衣であることは
ご存知なんですよね?

この辺り、C言語って面倒ですよねorz...

    int a[10];
    
    1[a] = 999;
    4[a] = 666;

こんな風にも書けちゃうC言語
構文的には(読んでいる側には)意味不明だが、a[1] = 999;やa[4] = 666;と等価。
配列とポインタを混同しやすい原因の一つ。
演算子のオペランドは交換可能であり、
a[n]は* ( (a)+(n) ) と同じになるからである。
なので、aとnが逆転しても構文上は正しいのである。
加えて「int array
が int *arrayの構文糖衣」であるということは、
配列を受けるように仮引数に書いてあったとしても実際にはポインタを受け取っていることになる。

配列を参照する事は常にポインタによって参照する事と等価である、と言える。