- ベストアンサー
プログラム内の「char *」の役割
- 「char *」の使い方の理解について
- 「char *」と「char」の違いによるエラーの発生
- ポインタ(*)の必要性について
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> なぜ、ポインタ(*)を付けないといけないのか > 分かりやすく教えていただけましょうか。 では、出来るだけ分かりやすくがんばります。 ■ char 型 について char 型というのは、キャラクターつまり、「1文字」を 保存する変数の型です。ここでいう「1文字」というは アルファベット1文字と思って頂いて結構です。 (漢字の1文字ではありません) では、アルファベットがいくつか集まった文字列を 保存するためにはどうしたらよいでしょうか? その答えは、「char の配列」という事になります。 配列というのは、同じ型の変数を複数並べたものなので 1文字を複数並べれば、文字列です。 つまり char[6] = "burbe"; burbe という文字列を保存するためには char が 6個(何故5文字なのに6個必要なのかは、『ここが最後』 という記号が必要だから)並んだ配列が必要になる。 以上より > show("文字列"); では show(char[7]) となっているのは分かって もらえるかな? (漢字1文字は char 2個分に相当。最後のマークを含めて合計7個分) ■ 文字列の受け渡し では、この文字列を関数の引数にしてやりとりする場合を 考えてみよう。 関数の引数にいれて渡すとき、配列をまるまる入れると コンピュータは、配列の中身を全部コピーしないと いけなくなる。 例えば、1万文字の小説を引数にいれると、なんと コンピュータはがんばって、1万文字をすべてコピーし 必要なメモリは2倍(2万文字相当)になってしまう。 こんなことは大変なので、実は C 言語では 「文字列(文字配列)が保存されている先頭の場所」 だけを渡すことになっている。 つまり、小説を関数の引数にいれてやりとりする場合 「あの小説をよろしく」みたいに、小説を指さすのです。 関数の中では「あぁ、あれね」みたいな使い方をする。 これが、ポインターというもの。指差しの「あれ」がポインター 文字列を関数でやりとりする場合、ポインターを使う 決まりになっているので void show(char *); が正解♪ 「文字列の先頭の文字のポインター」ということで char * となる --- もっと詳しく理解したい場合は google にて C言語 文字列 ポインター 配列 あたりをキーワードにして検索すれば、たくさん 解説ページがみつかると思うので、それらを読んで がんばってください。
その他の回答 (4)
- dai_k
- ベストアンサー率37% (3/8)
かなり適当ですみません。 私はいつもこんな風に使ってます。 とりあえず、見た目で理解できたらと思います。 LoadFile("test.wav"); //ファイルをロードする void LoadFile(char *FileName) { file = fopen(FileName, "r"); //ファイルを開く PlayWave(file); //ファイルを再生する。 }
- Tacosan
- ベストアンサー率23% (3656/15482)
この件そのものは C++ でも C でも同じなので, C++ だけに関する蛇足を 2点ほど: 1.昔から伝わっているコードを保守するならともかく, 新しくコードを書くのであれば #include <iostream> と .h のない形で書くべきです. 2.たいていの場合, String を使う方が楽だと思います. 例えば #include <string> void show(const String &str) { std::cout << str << std::endl; } のように.
- piyo-kichi
- ベストアンサー率47% (9/19)
"a"と'a'の違いがわかれば理解できると思います。 "a"の型はchar *ですが、'a'はcharです。
- emonky
- ベストアンサー率28% (18/63)
show("文字列"); この場合ではshowに渡されるデータが文字列となるので 文字列の先頭アドレスを示すchar型のポインタが 関数の引数となります。 ちょっと説明が難解ですがこれで分かりますか?