• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:下記、プログラム内の「char *」の役割)

プログラム内の「char *」の役割

このQ&Aのポイント
  • 「char *」の使い方の理解について
  • 「char *」と「char」の違いによるエラーの発生
  • ポインタ(*)の必要性について

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

  • ベストアンサー
  • togino
  • ベストアンサー率75% (97/129)
回答No.3

> なぜ、ポインタ(*)を付けないといけないのか > 分かりやすく教えていただけましょうか。 では、出来るだけ分かりやすくがんばります。 ■ 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)
回答No.5

かなり適当ですみません。 私はいつもこんな風に使ってます。 とりあえず、見た目で理解できたらと思います。 LoadFile("test.wav");  //ファイルをロードする void LoadFile(char *FileName) { file = fopen(FileName, "r"); //ファイルを開く  PlayWave(file); //ファイルを再生する。 }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

この件そのものは C++ でも C でも同じなので, C++ だけに関する蛇足を 2点ほど: 1.昔から伝わっているコードを保守するならともかく, 新しくコードを書くのであれば #include <iostream> と .h のない形で書くべきです. 2.たいていの場合, String を使う方が楽だと思います. 例えば #include <string> void show(const String &str) { std::cout << str << std::endl; } のように.

回答No.2

"a"と'a'の違いがわかれば理解できると思います。 "a"の型はchar *ですが、'a'はcharです。

  • emonky
  • ベストアンサー率28% (18/63)
回答No.1

show("文字列"); この場合ではshowに渡されるデータが文字列となるので 文字列の先頭アドレスを示すchar型のポインタが 関数の引数となります。 ちょっと説明が難解ですがこれで分かりますか?

関連するQ&A