だから、char const *、char * const、char const * const の違いを知っています。それらは:
char* the_string : the_string が指す文字を変更でき、それが指す文字を変更できます。
const char* the_string : the_string が指す文字は変更できますが、それが指す文字は変更できません。
char* const the_string : the_string が指す char は変更できませんが、それが指す char は変更できます。
const char* const the_string : the_string が指す文字を変更することも、それが指す文字を変更することもできません。
( const char * const 対 const char *?から)
さて、私の質問は次のとおりです。たとえば、渡された C 文字列を変更しない関数を書いているとしましょう。
int countA(??? string) {
int count = 0;
int i;
for (i=0; i<strlen(string); i++) {
if (string[i] == 'A') count++;
}
return count;
}
では、ヘッダーはどうすればよいでしょうか。
int countA(char const * string);
int countA(char const * const string);
ポインター自体も配列の内容も変更しないため、2 番目のものを使用する必要があると思います。しかし、標準関数のヘッダーを見ると、最初の関数が使用されています。例
char * strcpy ( char * destination, const char * source );
なんで?
(実際char const *
には、抽象文字列について考えている場合、文字列を変更していchar const * const
ないため (したがって、ポインターも内容も変更していないため)、私には意味がありません。文字列 (したがってchar *
、内容を変更する可能性があり、より多くのメモリを割り当てる必要がある可能性があるため、ポインターを変更する必要がある場合があります)
誰かが私にこのすべてを明確にしてくれることを願っています。ありがとう。