私は最近ダミーのために C++ を読んでいますが、タイトルが間違っているか、彼らは私を当てにしていませんでした。文字列でポインターの配列を利用することに関するセクションでは、私が完全に困惑し、どこに向かうべきかわからない関数を示しています。
char* int2month(int nMonth)
{
//check to see if value is in rang
if ((nMonth < 0) || (nMonth > 12))
return "invalid";
//nMonth is valid - return the name of the month
char* pszMonths[] = {"invalid", "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
return pszMonths[nMonth];
}
まず (主な質問ではありませんが)、戻り値の型がポインターである理由と、範囲外にならずに pszMonths を返す方法がわかりません。この本とオンラインでそれについて読んだことがありますが、この例ではわかりません。
私が持っている主な質問は、「これはどのように機能するのですか?!?!」です。ポインターの配列を作成して実際に初期化する方法がわかりません。私の記憶が正しければ、数値データ型でこれを行うことはできません。「ポインターの配列」内の各ポインターは、単語を構成する個々の文字を含む配列自体のようなものですか? このすべてが私の心を揺さぶるだけです。
8 月 20 日 - 私の混乱が実際にどこから生じているのかについて、私を助けようとしている人々によって混乱しているように思われるので、私はそれをよりよく説明しようとします. 特に私が懸念しているコードのセクションは次のとおりです。
//nMonth is valid - return the name of the month
char* pszMonths[] = {"invalid", "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
ポインターを作成すると、それを別の所定の値にしか割り当てることができないと思いました。ポインターの配列のように見えるもの(ここで本を参照)が月の名前を初期化することに混乱しています。ポインターが実際に値を初期化できるとは思いませんでした。配列は動的にメモリを割り当てていますか? 「無効」は本質的に「新しい文字」と同等です。ステートメントまたは同様のもの?
質問に答えてくれた場合に備えて投稿を読み直しますが、最初は理解できませんでした。