今回は、「二つの整数の和と差を求めるプログラム」をご紹介しよう。
なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.89.1)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0でコンパイルしている。
二つの整数の和と差を求めるプログラム
//二つの整数の和と差を求めるプログラム
#include <stdio.h>
//n1とn2の和と差を*sumと*diffに格納する関数
void sum_diff(int n1,int n2,int *sum,int *diff)
{
*sum = n1 + n2;
*diff = n1 > n2 ? n1 - n2 : n2 - n1;
}
int main(void)
{
int a,b;
int wa = 0,sa = 0;
puts("二つの整数を入力してください。");
printf("整数a:"); scanf("%d",&a);
printf("整数b:"); scanf("%d",&b);
sum_diff(a,b,&wa,&sa);
printf("和は%dで、差は%dです。\n",wa,sa);
return 0;
}
実行結果
二つの整数を入力してください。
整数a:67
整数b:12
和は79で、差は55です。
関数sum_diffでは、sumとdiffが、int *型のポインタになっている。
呼び出し側では、sumとdiffに対して、実引数として、&waと&saを与えている。
図のように、waとsaのアドレスがコピーされるため、*sumはwaのエイリアスとなり、*diffはsaのエイリアスとなる。
関数本体では、求めた和を*sumに代入して、差を*diffに代入する。
これらの代入は、waとsaへの代入を意味する。
main関数に戻っても、waとsaには正しい値が格納されている。
オブジェクトへのポインタを仮引数に受け取れば、そのポインタに間接演算子*を適用することにより、そのオブジェクトそのものにアクセスできる。
これを使うと、呼び出し元が用意したオブジェクトの値を呼び出された側で変更できる。
(参考)新・明解C言語 入門編 第2版 柴田 望洋 (著)SBクリエイティブ
コメント