関数に引数としてアドレスを渡すことが出来る。なぜこのようなことが必要かと言うと、 関数はその結果を一つしか返すことが出来ないからである。しかし、複数の結果を 返したいような場合もある。このような場合、変数のアドレスを渡すことで、直接 その値を操作することが出来る。
void str(char *src); main(){ char s[] = "this is a test."; str(s); printf("%s\n", s); } void str(char *src){ char *s = src; for(;*s != '\0'; s++){ if( *s==' ' ){ *s = ':'; } } } |
この例の場合、main()
で宣言している文字列 "this is a test." のアドレスを
関数 str()
に渡している。もちろん、関数 str()
でもそのアドレスを
受け取ることが出来るように、引数の宣言に char *src
を用いている点に
注意しよう。この結果、src
には先の "this is a test." のアドレスが代入
されることになる。従って、この文字列を直接変更するので、main()
関数で
の文字列の出力でも、"this:is:a:test." に変更されているのである。
char s[]
の意味は先の章で学習するが、ここでは意味的には
char *s
と同じ意味になっていることだけを知っておけば良い。