ポインタを関数に渡すこともできる。strlen() 関数に文字列の変数名を渡すと、実際にはポインタを渡していることになる。受け取る側の関数では、同じ型のポインタを受け取るように仮引数が宣言されていないといけない。
仮引数をポインタで受け取ると、そのポインタが指している変数に、関数内部からアクセスすることができる。つまり関数呼び出し時に使われた変数をその関数が変更できるということだ。strcpy() 関数などがうまく動くのはこのため。
次のプログラムは、文字列に改行をつけて出力する puts() の独自バージョン。myputs() 関数内で、ポインタを使って文字列(文字の配列)をたどっている。
#include void myputs(char *p); int main(void) { myputs("This is a test."); return 0; } void myputs(char *p) { while (*p) { printf("%c", *p); p++; } printf("\n"); }
takatoh@nightschool $ ./sample_6_7 This is a test.