在下面的代码中,要计算strlen,
int s(const char* str)
{
int count=0;
while(*str++) count++;
return count;
}
你可以看到参数str是const。但是,当我执行str ++时,编译器不会抱怨。我的问题是
当将指针作为参数传递给C函数时,如果is是用const限定的,我怎么还能对它执行指针算术?上述函数中的const是什么?
答案 0 :(得分:12)
const char* str;
表示指向const数据的非const指针。
char* const str;
表示指向非const数据的const指针。
const char* const str;
表示指向const数据的const指针。
原因是在C ++中,变量类型声明从右到左进行解析,这导致单词“const”始终定义它最接近的东西的常量。
答案 1 :(得分:5)
它没有声明指针const
,而是将指向的事物声明为const
。试试这个:
int s(const char* const str)
使用此声明,修改str
时会出现编译错误。
答案 2 :(得分:2)
const char * ch; // non-const pointer to const data
char * const ch; // const pointer to non-constant data.
const char * const ch; // const pointer to const data
注意: 还
const char * ch;
等于
char const * ch;
答案 3 :(得分:0)
指针指向const char
,一个只读字符数组。