所以,我知道 char const *、char * const 和 char const * const 之间的区别。那些是:
char* the_string :我可以更改 the_string 指向的字符,也可以修改它指向的字符。
const char* the_string :我可以更改 the_string 指向的字符,但我不能修改它指向的字符。
char* const the_string :我无法更改 the_string 指向的字符,但我可以修改它指向的字符。
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);
我的感觉是我应该使用第二个,因为我不会修改指针本身,也不会修改数组的内容。但是当我查看标准函数的标题时,他们使用第一个。例子
char * strcpy ( char * destination, const char * source );
为什么?
(实际上char const *
对我来说没有任何意义,因为如果您正在考虑抽象字符串,则要么您没有修改字符串(因此,char const * const
因为您没有修改指针,也没有修改内容),否则您将修改字符串(所以只是char *
因为,你可能会修改内容,你可能需要分配更多的内存,所以你可能需要修改指针)
我希望有人能把这一切告诉我。谢谢。