C言語 ポインタ変数(1) 定義
C言語改訂版1 はじめてのプログラミング (CD-ROM付) (プログラミング学習シリーズ)
- 作者: 倉薫
- 出版社/メーカー: 翔泳社
- 発売日: 2009/02/13
- メディア: 大型本
- 購入: 3人 クリック: 14回
- この商品を含むブログ (3件) を見る
ポインタ変数とは
「変数などの場所を覚えておくための変数」
ポインタ変数を使うと、1つの変数で、複数の別の変数の代わりをすることが出来たり、配列でポインタ変数を扱うと演算が出来る、とのこと。
#include <stdio.h> main () { int a[5] = {1,2,3,4,5}; int *p; int i; p = a; //配列の先頭ポインタを取得 p = &a[0]の省略形 for (i = 0; i < 5; i++) { printf("%d\n",*(p+i)); } }
ポインタpを int *p によって定義。p = aによってaの1番目の要素(a[0])を割り当てる。for文の中ではp+i(つまりa[0+i])を表示されている。
ポインタの使い道の1つとして、配列の成分にポインタを割り当てて、ポインタを動かすことで配列に対して演算を実行して使う、ということか。
以下出力。
1 //a[0] for文中では*p+0
2 //a[0+1] for文中では*p+1
3 //a[0+2] for文中では*p+2
4 //a[0+3] for文中では*p+3
5 //a[0+4] for文中では*p+4
なお、以下のように出力を*(p+i)ではなく、pとすると、pが覚えている場所の数列が表示される。
#include <stdio.h> main () { int a[5] = {1,2,3,4,5}; int *p; int i; p = a; //配列の先頭ポインタを取得 p = &a[0]の省略形 for (i = 0; i < 5; i++) { printf("%d\n",*(p+i)); printf("%d\n",p+i); } }
以下出力。iが1増加する毎になぜか4増加している。これは何故だろうか。
1 //for文中では*p+0 954535584 //for文中ではp+0 2 //for文中では*p+1 954535588 //for文中ではp+1 3 //for文中では*p+2 954535592 //for文中ではp+2 4 //for文中では*p+3 954535596 //for文中ではp+3 5 //for文中では*p+4 954535600 //for文中ではp+4
【追記】
ポインタ変数を定義するときは、
char *p, int *p
などと書き、1 ) ポインタ変数にアドレスを格納する際は
p = 文字列, p = &変数, p = &a[i] または a (aが配列の場合)
などと書く。2) ポインタ変数にそのものに値を格納する際は、
*p = 文字列, *p = 変数
などと書く。ポインタ自体はwindowsのショートカットのようなものであり、1)の行為はショートカット先を決める行為、2)の行為はショートカット開き変数を編集することに相当する。と理解した。
【追記2】
&はアドレスを取得する演算子、*は中身を取得する演算子 である。