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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎配列とポインターの基本: 「式の中では、配列は「その先頭要素へのポインター」に読み替えられる」わけではなく、アドレス式の文脈に限って先頭要素のアドレスに等しい。またポインターとアドレスを混同している。
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎1次元の配列と要素型へのポインター: 配列をループでまわず場合、要素数は計算で求めるか番兵を決めましょう。配列変数にアドレス演算子を適用した場合の解釈に誤りがありました(コメント内)。&aが配列全体を示すポインタならインクリメントすると最後の要素の次を示すはずだがそうはなりません。
タグ: 2017年版ソースエディター
19 行
int a[5] = {2, 3, 5, 7, 11};
 
for (int i = 0; i < 4sizeof a / sizeof *a; i++)
printf("%d ", a[i]); //配列aの要素を一覧表示する。
printf("\n");
 
int *p = a;
int *pa = a; /* 配列名(この場合は「a」)は配列の先頭要素(int)のアドレスを示す。
printf("%d\n", *(p + 2)); &a は//ポインターpを使って配列aアドレス要素を表のでその場合は、int (*)[10] が型となる。 */
printf("%d\n", *(pa + 2)); //ポインターpaを使って配列aの要素を表示する。
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
2 3 5 7 11
5
</syntaxhighlight>
 
一般に配列の先頭要素のアドレスを格納したポインター変数 pap では、 +0 によって配列の0項目。+1によって配列の1項目、+2によって配列の2項目、・・・を参照できます。
このため、上記のような<code *(pap + i)></code>というコードで、配列のそれぞれの要素を参照できます。
 
== 1次元の配列と配列へのポインター ==