我知道char const *、char * const和char const * const之间的差异,分别是:
char* the_string:我可以更改the_string指向的char,并且可以修改它所指向的char。
const char* the_string:我可以更改the_string指向的char,但不能修改它所指向的char。
char* const the_string:我无法更改the_string指向的char,但可以修改它所指向的char。
const char* const the_string:我既不能更改the_string指向的char,也不能修改它所指向的char。
(摘自const char * const versus 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 *
,因为你可能需要修改内容,也可能需要分配更多内存,因此可能需要修改指针)
希望有人能够让我彻底明白,谢谢。
const
实际上 不会 影响签名! - DevSolar