関数間での文字列の受渡しに関しては、次のようになります。例のように、文字列の先頭アドレス("start"は文字's'のアドレスを指します)を引数として渡し、それをポインタ変数で受けています。 scan_a() 関数内では、文字列中をポインタを増加させながら探索し、文字 'a' が見つかった時点で、その位置を返す処理を行っています。
#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 の値を返す */ }
このように、配列や文字列の内容はその先頭アドレスを関数の引数として渡すことにより、複数のデータの call by reference が可能となっています。