• ベストアンサー

基本情報技術者検定の平成13年度秋期午後問題について

http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H13b2/pm06.html この問題のポインタの使いかたについて疑問があるのでお願いします。 まず、12,13行目からmlstr=mlstrのアドレスとして扱っています。そして15行目でmlstr = parse_ml_data(mlstr + 1, 1);関数を呼び出し そして16行目のchar *parse_ml_data(char *mlstr, int level)関数でmlstrのポインタとして受け取っています。 よって、この関数内では12,13行目で使われているmlstrのポインタを表すので、mlstr=mlstrの値を表すのではないかと思うのですが、22行目などからアドレスで扱っているようになっています。 ポインタについていまいち自信がもてないので、よろしければどこか間違って解釈いるところがれば、教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

結論からいうと、parse_ml_data関数内の「mlstr」はポインタで、「*mlstr」はポインタの中身だよ。 parse_ml_string関数内に書かれている mlstr = parse_ml_data(mlstr + 1, 1); の第一引数「mlstr + 1」はparse_ml_data関数の宣言文 char *parse_ml_data(char *mlstr, int level) の第一引数にあたるわけなんですけど、第一引数は「*mlstr」ではなく、「mlstr」なのです。 だからこの関数の宣言文を char *parse_ml_data(char* mlstr, int level) っていう風に書くとわかりやすいんですよね。 私もここでよく悩みました。 しかし文章のみで説明するというのは難しいです。 質問と回答があってますでしょうか?

関連するQ&A

専門家に質問してみよう