文字列を関数に渡すとき、時々使用します
char *functionname(char *string name[256])
そして時々私はポインターなしでそれを使用します(たとえば:
char functionname(char string[256])
私の質問は、いつポインターを使用する必要があるのですか?多くの場合、ポインターなしでプログラムを作成して動作しますが、動作しない場合もあります。
C文字列を関数に渡すために受け入れられている規則は、ポインターを使用することです。
void function(char* name)
関数が文字列を変更するときは、長さも渡す必要があります。
void function(char* name, size_t name_length)
最初の例:
char *functionname(char *string name[256])
必要なものではない文字列へのポインタの配列を渡します。
2番目の例:
char functionname(char string[256])
文字の配列を渡します。ここでの配列のサイズは重要ではなく、パラメーターはとにかくポインターに減衰するため、これは次と同等です。
char functionname(char *string)
Cの配列引数の詳細については、 この質問 も参照してください。
あなたが書くつもりだったと仮定して
char *functionname(char *string[256])
ここでは、char
への256個のポインターの配列を引数として受け取り、charへのポインターを返す関数を宣言しています。一方、ここでは、
char functionname(char string[256])
256 char
sの配列を引数として受け取り、char
を返す関数を宣言しています。
つまり、最初の関数は文字列の配列を受け取って文字列を返し、2番目の関数は文字列を受け取って文字を返します。
配列はポインターです。 「オブジェクト」のシーケンスの開始点を指します。
ìnt arr[10];
の場合、arr
はメモリ位置へのポインタであり、そこから10個の整数が続きます。それらは初期化されていませんが、メモリは割り当てられています。 int *arr = new int[10];
を実行するのとまったく同じです。