1-12-2. ポインタ渡し

公開日: 1:26 1. 基本編/1-12. 関数/1-12-2. ポインタ渡し


関数の引数へのポインタ渡しは引数のアドレスを仮引数へコピーします。関数内部において、アドレスは呼び出しに使われた実引数へアクセスするのに使われます。これは関数内での引数への変更が、呼び出し時に渡した引数へ影響することを意味します。

ポインタによって値を渡すには、他の値と同様に関数に引数ポインタが渡されます。それに応じて次の示す引数の指す2つのint型変数を交換するswap関数のように、関数の引数をポインタ型として宣言する必要があります。
// 値を交換する関数定義
void swap(int *x, int *y)
{
   int temp;
   temp = *x; // xを保存
   *x = *y;   // y を x に代入
   *y = temp; // x を y に代入
  
   return;
}

swap()関数をポインタ渡しで呼び出してみましょう。

#include <iostream>
using namespace std;

// 関数宣言
void swap(int *x, int *y);

int main ()
{
   // ローカル変数の宣言
   int a = 100;
   int b = 200;
 
   cout << "交換前のaの値 :" << a << endl;
   cout << "交換前のbの値 :" << b << endl;

   /* 値を交換する関数の呼び出し
    * &a はaのポインタを示し、即ち、変数aのアドレス
    * &b はbのポインタを示し、即ち、変数bのアドレス
    */
   swap(&a, &b);

   cout << "交換後のaの値 :" << a << endl;
   cout << "交換後のbの値 :" << b << endl;
 
   return 0;
}

上記のコードを一つのファイルに入れてコンパイル・実行すると、次の結果が得られます。
交換前のaの値 :100
交換前のbの値 :200
交換後のaの値 :200
交換後のbの値 :100
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿