第16回

それじゃ文字列型は?

98/11/06 IE4.xに対応させた
98/04/29メールアドレス訂正

突然ですが問題です。(^_^;またかよー。

mainの中で宣言された2つの文字列型変数aとbがあるとします。これらの2つの変数の値を交換する関数を定義するには、どうしたらいいでしょうか?

と、いうのが今回のテーマです。(^_^;


前回の問題との違いは、単に交換する変数のデータ型が、int型から文字列型に変わっただけです。よって前回の 「関数に、変数の値ではなく、その変数のアドレスを渡してやればいいのです。」というのが正解なのですが、実際にプログラムを書いてみると、これがちょっと難しいのです。
というのは、文字列型変数そのものがchar型のポインタ(char *)であるからです。

では、一体どうしたらいいのでしょうか?


答え。
関数に渡すのは、char型のポインタのポインタということになります。つまり、char **です。ホ、ホントですよ。よって、その関数は、以下のように定義します。あ、関数名は、strswapにしました。
void strswap(char **a,char **b){
    char *x;
    x=*a;
    *a=*b;
    *b=x;
}
あと、main側の、strswap関数を呼ぶところなのですが、
strswap(&a,&b);
といった具合に、aとbはポインタであるにも関わらず、それらの前に単項演算子&がついてしまいます。というのも、ここで関数に渡すのが、char型のポインタ(つまり文字列型)のアドレスになるからです。よって、この書き方が正解なのです。

つづく(最近短いな・・・)。


[メニュー][第15回][第17回]

いーざ
email:CQP00202@nifty.ne.jp