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

※間違ってたらすみません。
わかった時点で修正します。

コメント

このブログの人気の投稿

ダイソー テープライト リモコン付 分解

C++ round関数を使わずに小数第n位の四捨五入をする

C++ cout関数とcin関数を用いた基本的な入出力