問題はあなたが考えているよりも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);
しかし、あなたの意図をより明確にします。そして将来的には、境界チェックを行うツールもあるかもしれません。