「C言語/配列とポインタ」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎1次元の配列と要素型へのポインター: 配列をループでまわず場合、要素数は計算で求めるか番兵を決めましょう。配列変数にアドレス演算子を適用した場合の解釈に誤りがありました(コメント内)。&aが配列全体を示すポインタならインクリメントすると最後の要素の次を示すはずだがそうはなりません。
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎1次元の配列と配列へのポインター: 「配列へのポインターを配列のアドレスで初期化」は「配列へのポインター」を使っていることが原因で &a とは無関係。
タグ: 2017年版ソースエディター
34 行
一般に配列の先頭要素のアドレスを格納したポインター変数 p では、 +0 によって配列の0項目。+1によって配列の1項目、+2によって配列の2項目、・・・を参照できます。
このため、上記のような<code *(p + i)></code>というコードで、配列のそれぞれの要素を参照できます。
 
== 1次元の配列と配列へのポインター ==
配列の要素型へのポインターではなく、配列へのポインターを使うと以下のようになります。
 
;[https://paiza.io/projects/3eRnG5ZOadi0WUDwJ2_7Yw?language=c 1次元の配列と配列へのポインター]:<syntaxhighlight lang="C" line>
#include <stdio.h>
 
int main(void) {
int a[5] = {2, 3, 5, 7, 11};
int (*pp)[sizeof a / sizeof *a] = &a; // 配列へのポインターを配列のアドレスで初期化
 
for (int i = 0; i < 4; i++)
printf("%d ", (*pp)[i]);
printf("\n");
printf("%d\n", *((*pp) + 2)); //配列へのポインターppを使って配列aの要素を表示する。
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
2 3 5 7
5
</syntaxhighlight>
 
== 配列変数名とアドレス演算子 ==