「ABC」などの文字列リテラルをchara[]exに割り当てる場合。
char a[] = "ABC";
それはする効果があります
char a[4] = {'A','B','C','0'};
これを関数パラメーターに渡すときにも同じことが当てはまりますか
元。
int f(char a[]);
対。
int f(char *a);
これを関数パラメーターに渡すときにも同じことが当てはまりますか
いいえ; 一般に、Cでは、配列を値で直接渡すことはできません。関数へのすべての配列パラメーターは、実際にはコンパイラーによってポインターパラメーターとして解釈されます。
int f(char a[]);
コンパイラは
int f(char *a);
(配列の次元を指定した場合でも同じことが当てはまります)
ところで、
それはする効果があります
char a[3] = {'A','B','C"};
実際には、次のような効果があります。
char a[4] = {'A','B','C', 0};
いいえ、これらの関数宣言は両方とも同一であるためです。どちらも、へのポインタを受け取る関数を宣言しますchar
。どちらの場合も、引数は文字列リテラルの最初の要素へのポインタで初期化されます。