Lesson7で関数を扱ったが、関数はreturnで1つの戻り値しか返せない。

よって2つ以上変えたい場合にアドレスや参照を使う手がある。(と解釈した)

 

◆ポインタとアドレス

変数のアドレスはポインタに格納する。

・変数aのアドレスは &a

・変数AのポインタpAの宣言は int* pA

・ポインタに格納されているアドレスに対応する変数を知るには *pA(要はaと同じ)

 

int a;

int* pA;

a=5;

pA =&a;


※2個以上記載する時は int *pA, *pB;

※ポインタには代入が必要。最初に宣言した時に初期値を入れておくと良い

int* pA = &a;

 

◆引数とポインタ・引数と参照

関数内で引数xとyを交換してもそれを戻り値で返すことができなので、xとyをいじるのではなくxとyのポインタを指定して値を交換する。

なお下記の

 void swap(int* pX,int* pY);

 

#include <iostream>
using namespace std;
//swap関数の宣言
 void swap(int* pX,int* pY);
 
 int main()
 {
     int num1 =5;
     int num2 =10;
     cout << "変数num1の値は" << num1 << "です。\n";
     cout << "変数num2の値は" << num2 << "です。\n";
     cout << "変数num1とnum2の値を交換します。\n";
     swap (&num1,&num2);
     cout << "変数num1の値は" << num1 << "です。\n";
     cout << "変数num2の値は" << num2 << "です。\n";
     return 0;     
 }
//swao関数の定義
void swap(int* pX,int* pY)
{

    int tmp;
    tmp = *pX;
    *pX=*pY;
    *pY=tmp;
}

※参照で書くと下記のようになる。

#include <iostream>
using namespace std;
//swap関数の宣言
 void swap(int& x,int& y);
 
 int main()
 {
     int num1 =5;
     int num2 =10;
     cout << "変数num1の値は" << num1 << "です。\n";
     cout << "変数num2の値は" << num2 << "です。\n";
     cout << "変数num1とnum2の値を交換します。\n";
     swap (num1,num2);
     cout << "変数num1の値は" << num1 << "です。\n";
     cout << "変数num2の値は" << num2 << "です。\n";
     return 0;     
 }
//swao関数の定義
 void swap(int& x,int& y)
{
    int tmp;
    tmp = x;
    x=y;
    y=tmp;
}

※実引数を変更したくない時は void swap(const int& x)としておく。constを入れると、その引数の変更ができなくなる。