「ポインタ応用編」の編集履歴(バックアップ)一覧に戻る

ポインタ応用編 - (2019/04/25 (木) 13:30:27) のソース

*第四項 ポインターを使った関数
ポインターは関数の中で使うことで真価を発揮します。
関数の中で使う前にポインターの使い方について復習しておきます。
 int* p; //int型ポインターpを宣言。
 
 int num = 0; //int型の変数numを宣言。
 
 p = # //pにnumのアドレスを格納
 
 *p = 5; //pからアクセスしてnumの値を変更
 
 int a = *p; //pからアクセスしてnumを参照
 * と & の使い方を覚えてください。
ポインターから変数へアクセスすることで値を変更したり、参照したりできることを覚えてください。
今まで scanf_s関数に変数を渡すときは変数の前に & を付けていました。
これは変数のアドレスを渡していたのです。
変数のアドレスを渡すことができれば、scanf_s関数は数値を代入することができます。
変数名の前に & を付ける以外にもう一つアドレスを渡す方法があります。
ポインターを宣言し、変数のアドレスを格納して、ポインターを引き数として渡す方法です。
 int num = 0;
 
 int* p = #
 
 printf("数値を入力してください\n");
 
 scanf_s("%d",p);
 
 printf("入力された数値は%dです。\n",num);

整数型の引数を二つ受け取り、それぞれの値を入れ替える Swap関数を作ります。
 void Swap(int* x,int* y){
 	int tmp = *x;
 
 	*x = *y;
 
 	*y = tmp;
 }
 
 /*~~~~~~~~~~中略~~~~~~~~~~*/
 
 	int a = 20;
 	int b = 10;
 
 	printf("aは%dです。\n",a);
 	printf("bは%dです。\n",b);
 
 	Swap(&a,&b); printf("aとbを入れ替えます。\n");
 
 	printf("aは%dです。\n",a);
 	printf("bは%dです。\n",b);
関数の引数に &a &b と書くことで、変数のアドレスを関数にわたします。
アドレスを受け取るにはポインターが必要です。
この関数では x,y のポインターでアドレスを受け止めています。
アドレスを受け止めた x,y から本体にアクセスします。
本体にアクセスすることで、変数本体の数値を参照、変更できます。

**練習問題
次のようなプログラムを作ってください。
第1問
 int型変数のアドレスを受け取り、その変数に10を代入する関数を作る。
第2問
 int型の変数 flag のアドレスを受け取り、flagの値が0なら1に1なら0にする関数を作る。
*第五項 ポインターのポインター
ポインターも変数の一種なので、自身もアドレスを持っています。
そのアドレスをほかのポインターに格納することもできます。
 int num = 10;
 
 int* p = #
 
 int** pp = &p; //ポインターのアドレスを格納するポインター(ポインターのポインター)
 
 printf("%d\n",**pp); 
あまり使うことはないですが、ポインターのポインターのポインターも作ることができます。
 int num = 5;
 
 int* p = #
 
 int** pp = &p;
 
 int*** ppp = &pp;
 
 printf("%d\n",***ppp); 


[[ポインタの答え]]
目安箱バナー