char*
C++ で文字列をパラメーターとして受け取ることはできますか? もしそうなら、これはどのように機能しますか。
例:
myfunc("hello"); //call
myfunc(char * c)
{ ...
}
文字は文字列にどの程度正確に関連していますか?
リテラルの型は"hello"
ですconst char[6]
。これは、文字列用のスペースと NULL 終端バイトを含む文字の配列です。
C++ では、関数の引数を渡すときに別の型に変換できます。この場合、配列型はポインタ型 に変換されconst char *
、ポインタは value を持つ最初の文字を参照します'h'
。
C++03 では への変換が許可されchar *
、 が削除されましconst
たが、実際に文字列を変更する動作は未定義でした。これは古い学校の C との互換性のために行われ、新しい C++11 標準では取り消されたため、この例は新しいコンパイラに合格しません。
ちなみに、C から継承された従来の考慮事項により、関数が代わりに として宣言されても違いはありませんmyfunc(char c[6])
。の型はc
そのままですchar *
。
あなたの例では期待どおりに機能しません。この方法で文字列を使用する(先頭の文字へのポインタ)は、文字列がnullで終了する場合にのみ機能します。これが古いc_strの仕組みです。最初の文字への参照がある場合は、終了文字「\0」が見つかるまで繰り返して文字列全体にアクセスできます。