「ポインタ応用編」の編集履歴(バックアップ)一覧はこちら

ポインタ応用編」(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関数に変数を渡すときは変数の前に & を付けていました。 これは変数のアドレスを渡していたのです。 変数のアドレスを渡すことができれば、scanf関数は数値を代入することができます。 変数名の前に & を付ける以外にもう一つアドレスを渡す方法があります。 ポインターを宣言し、変数のアドレスを格納して、ポインターを引き数として渡す方法です。 int num = 0; int* p = # printf("数値を入力してください\n"); scanf("%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); [[ポインタの答え]]
*第四項 ポインターを使った関数 ポインターは関数の中で使うことで真価を発揮します。 関数の中で使う前にポインターの使い方について復習しておきます。 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); [[ポインタの答え]]

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー