- ベストアンサー
基本情報技術者検定の平成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行目などからアドレスで扱っているようになっています。 ポインタについていまいち自信がもてないので、よろしければどこか間違って解釈いるところがれば、教えてください。お願いします。
- みんなの回答 (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) っていう風に書くとわかりやすいんですよね。 私もここでよく悩みました。 しかし文章のみで説明するというのは難しいです。 質問と回答があってますでしょうか?