一つのポインタで、値をもらうことも返すこともできるという例です。
コード:
#include <stdio.h>
double conv(double x)
{
return x * 1.61;
}
int main(void)
{
double a;
scanf("%lf", &a);
a = conv(a);
printf("%g\n", a);
return 0;
}
conv は、double の値を渡すと、1.61倍の値に変換して返す関数です。
main は、conv を用いて、標準入力から入力された値を 1.61倍の値に
変換して出力するプログラムで、変数は a だけです。
通常、関数は、上の例のように返却値として値を返しますが、ポインタ
を使用すると、次の例のように引数を用いて値を受け取ることも返す
こともできます。
コード:
#include <stdio.h>
void conv1(double *p)
{
*p *= 1.61; // *p = *p * 1.61; でも同じ
}
int main(void)
{
double a;
scanf("%lf", &a);
conv1(&a);
printf("%g\n", a);
return 0;
}
p は「double へのポインタ」です。
&a は、変数 a のアドレスです。アドレスは「ポインタの値」です。
conv1 を呼び出すと、p は、その値を受け取るので、a を指します。
「*p *=」は「a *=」と同じ意味になり、
「a = a * 1.61」と同じ意味になります。
小文字を大文字に変換する関数は、double * の代わりに char * の
引数を使えばよいでしょうお。
コード:
void conv0(char *p)
{
*p -= ' '; // *p ^= ' '; でもよい
}
さあ、main はどう書けばよいでしょうか?