C中的指针算术和const限定符

时间:2011-01-24 19:45:02

标签: c++ c

在下面的代码中,要计算strlen,

int s(const char* str)
{   
    int count=0;        
    while(*str++) count++;
    return count;
}

你可以看到参数str是const。但是,当我执行str ++时,编译器不会抱怨。我的问题是

当将指针作为参数传递给C函数时,如果is是用const限定的,我怎么还能对它执行指针算术?上述函数中的const是什么?

4 个答案:

答案 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,一个只读字符数组。