演習課題「間違い探し」
右のコードは、期待通りに動作しません。
コードを修正して、add_one 関数で値が 1 足されるようにしてください。
プログラムを実行して、正しく出力されれば演習課題クリアです!
期待する出力値
11
21
31
#06:swap関数をつくろう
ポインタを引数としてもつ関数を定義します。例として swap 関数をつくってみましょう。
関数を呼び出すとき、引数に変数を指定すると、値のコピーが渡されます。
関数に引数として値を渡す方法は「値渡し (pass by value)」と呼ばれます。
値渡しでは、引数として渡した変数そのものの値を書き換えることができません。
関数に引数としてポインタを渡す方法は、値渡しに対して、「ポインタ渡し (pass by pointer)」と呼ばれることがあります。
swap 関数などの変数そのものの値を書き換える関数は、ポインタ渡しによって実現できます。void swap(int *p1, int *p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
※ポインタ渡しは、つまり、「ポインタを値渡ししている」ということです。
関数にアドレスのコピーを渡して、そのアドレスが示す先を書き換えることで、変数の値を書き換えています。
※C++ などの言語では、参照渡しという方法で値を書き換えることができますが、C 言語には参照渡しの機能がありません。
// swap 関数をつくろう
#include <stdio.h>
void swap(int *p1, int *p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main(void)
{
int a = 10;
int b = 20;
printf("a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("a = %d, b = %d\n", a, b);
}