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を入れると、その引数の変更ができなくなる。