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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
10 行
次の例のように、ポインターに配列のアドレスを代入し、ポインター演算によって配列の要素を一括で参照することができる。(この他、一括ではなく要素ひとつひとつにポインタを作ることも可能だが、実用性が乏しいので、ひとつひとつのポインタについては本ページでは省略する。)ポインタ *pa には参照先配列の先頭のアドレス値が入るので、宣言するポインタの書式については、配列宣言ではなく一変数の宣言になる。
 
;[https://paiza.io/projects/cFKWhqT4SkA0C7ZAVMLEkw?language=c 1次元の配列と要素型へのポインターの使用例]:<syntaxhighlight lang="C" line>
#include <stdio.h>
 
33 行
一般に配列の先頭要素のアドレスを格納したポインター変数 pa では、 +0 によって配列の0項目。+1によって配列の1項目、+2によって配列の2項目、・・・を参照できます。
このため、上記のような<code *(pa + 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>
 
== 配列ポインタに対する加算 ==