1 関数引数とポインタ

   1.3 文字列データの受け渡し
 関数間での文字列の受渡しに関しては、次のようになります。
#include <stdio.h>

int scan_a(char *stptr); /* 関数のプロトタイプ宣言 */

int main(void){
      printf("%d\n", scan_a("start")); /* 指定文字列内の'a'の位置を表示 */
}

int scan_a(char *stptr){
      int  index = 0;       /* 文字列内の位置 */

      while(*stptr != '\0'){/* 文字列の終端に達するまで以下を繰り返す */
            if(*stptr == 'a') 
                return(index);    /* 文字'a'が見つかったらその位置を返す */
            index++;            /* 文字列内の位置をインクリメント */
            stptr++;            /* 次の文字を指すアドレスへ */
      }
      return(-1);           /* 文字'a'が見つからなかったら -1 の値を返す */

}
 例のように、文字列の先頭アドレス("start"は文字's'のアドレスを指します)を引数として渡し、それをポインタ変数で受けています。 scan_a() 関数内では、文字列中をポインタを増加させながら探索し、文字 'a' が見つかった時点で、その位置を返す処理を行っています。

 このように、配列や文字列の内容はその先頭アドレスを関数の引数として渡すことにより、複数のデータの call by reference が可能となっています。