next up previous contents
Next: 5. グローバル変数 Up: 13. 関数 III Previous: 3. 返り値または引数を持たない関数

4. ポインタ変数と引数

関数に引数としてアドレスを渡すことが出来る。なぜこのようなことが必要かと言うと、 関数はその結果を一つしか返すことが出来ないからである。しかし、複数の結果を 返したいような場合もある。このような場合、変数のアドレスを渡すことで、直接 その値を操作することが出来る。


        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." に変更されているのである。

gcc などでコンパイルするときには、前回同様オプションを指定しなけれ ばならない。



Noriyo Kanayama 平成14年11月26日