【发布时间】:2012-07-21 15:09:44
【问题描述】:
所以,我知道 char const *、char * const 和 char const * const 之间的区别。那些是:
char* the_string :我可以更改 the_string 指向的字符, 我可以修改它指向的字符。
const char* the_string :我可以将 char 更改为 the_string 点,但我无法修改它指向的字符。
char* const the_string : 我无法将 the_string 更改为 char 点,但我可以修改它指向的字符。
const char* const the_string : 我无法将 char 更改为 the_string 指向,我也不能修改它指向的字符。
(来自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 *,因为你可能会修改内容并且你可能需要分配更多的内存,所以你可能需要修改指针)
我希望有人能把这一切告诉我。谢谢。
【问题讨论】: