C/C++言語 ポインタとは
C/C++言語でポインタを使う
サンプルプログラム1
#include <stdio.h> //標準入出力関数を使うときに必要なヘッダー
int main(void){
int *p;
int n;
printf("数値を入力してください。n:");
scanf("%d", &n);
p = &n; //ポインタpに変数nのアドレスを代入
printf("&n = %p p = %p\n",&n, p); //ポインタpに代入されたアドレスと、変数bのアドレスを表示
printf("*p = %d\n", *p); //ポインタpに格納されたアドレスから値を取り出して表示
return 0;
}
サンプルプログラム1ではポインタpに変数nのアドレスを代入している。 このプログラムを実行すると、&nとpのアドレスが一致することがわかる。 つまり、&nでアドレスを取得し、ポインタpに代入されている。 また、*pは値が取り出されており、変数nと同じ値が表示されるはずだ。 ここで、出てきた&と*はポインタ演算子という。 *は値を取り出す。 &はアドレスを取り出す。 アスタリスクで値 アンドでアドレス と覚えるといい。 ポインタはサンプルプログラム2のように使うことができる。
#include <stdio.h> //標準入出力関数を使うときに必要なヘッダー
int main(void){
char *p;
char n[] = "abcdefghijklmnopqrstuvwxyz";
p = &n; //ポインタpに配列nの先頭のアドレスを代入
printf("p = %c", *p); //ポインタpの値を表示
p++; //1を加算
printf("p++ = %c\n", *p); //加算後のポインタpの値を表示
return 0;
}
サンプルプログラム2のようにポインタpには配列先頭のアドレスが代入される。 pを加算していくことで、次の配列に格納されているデータのアドレスになる。 そのため、隣のデータが表示された。 C++でも同様の操作を行うことができる。
参考
林晴比古 : “新C++言語入門ビギナー編”, ソフトバンク クリエイティブ株式会社, pp.212~213, 2006
※間違ってたらすみません。
わかった時点で修正します。
コメント
コメントを投稿