問題はあなたが考えているよりもCでより一般的です。char*
およびは関数パラメーターと同等であるためchar[]
、このようなパラメーターは3つの異なるセマンティック概念を参照する場合があります。
- 1つの
char
オブジェクト上のポインター(これはポインター型の「公式」定義です)
char
配列_
- 文字列
可能な場合はほとんどの場合、C標準のmondernインターフェイスはvoid*
型指定されていないバイト配列を使用します。おそらくその規則に従いchar*
、文字列にのみ使用する必要があります。
char[]
それ自体では、おそらくそのように使用されることはめったにありません。これらの多くのユースケースを想像することはできません。それらを数字と考える場合は、signed
またはunsigned
バリアントを使用する必要があります。ビットパターンと同じように表示する場合はunsigned char
、選択する必要があります。
配列を関数パラメーターとして本当に意味する場合(char
またはそうでない場合)、コードのカジュアルな読者のために、明確に示すことでその事実をマークできます。
void toto(size_t n, char A[const n]);
これは同等です
void toto(size_t n, char *const A);
しかし、あなたの意図をより明確にします。そして将来的には、境界チェックを行うツールもあるかもしれません。