「C言語/配列とポインタ」の版間の差分
削除された内容 追加された内容
→多次元配列と多次元配列へのポインター: 多次元配列へのポインターの宣言の例 タグ: 2017年版ソースエディター |
cleanup タグ: 2017年版ソースエディター |
||
1 行
{{Nav}}
__TOC__
== 配列とポインターの基本 ==
配列とポインターには密接な関係がある。
式の中では、配列は「その先頭要素へのポインター」に読み替えられる(この場合、ポインターのしめす型は配列の要素型であるが多次元配列では複合的になるので次数の計算が必要になる [[#多次元配列と多次元配列へのポインター|後述]])。
また、p[i]は*(p+i)の[[W:糖衣構文|糖衣構文]]である<ref>p[i] ⇒ *(p+i) ⇒ *(i+p) ⇒ i[p] との交換則が成り立ち、難読化プログラミングでしばしば用いられる。<br>C言語のほかの糖衣構文]としては、 p->m ⇒ (*p).m があげられる。</ref>。
次の例のように、ポインターに配列のアドレスを代入し、ポインター演算によって配列の要素を参照することができる。
▲//例 1次元の配列を指すポインタの使用例
#include <stdio.h>
int main(void) {
int a[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
int *pa = a;▼
▲ for (int i = 0; i < sizeof a / sizeof *a; i++)
▲ printf("%d ", a[i]); //配列aの内容を表示する。
printf("\n");
for (int i = 0; i < 10; i++)▼
▲ int *pa = a;
printf("%d ", *(pa + i)); //ポインタpaを使って配列aの内容を表示する。▼
printf("\n");
}
</syntaxhighlight>
:{{code|sizeof a / sizeof *a}}は、配列の要素数を求めるイデオム。
== 多次元配列と多次元配列へのポインター ==
88 ⟶ 83行目:
== 参考文献 ==
*前橋和弥著『C言語 ポインター完全制覇』平成13年6月25日初版第4刷発行
[[Category:C言語|はいれつとほいんた]]
|