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

arb*_*ero 3 c c++

在下面的一段代码中,计算strlen,

int s(const char* str)
{   
    int count=0;        
    while(*str++) count++;
    return count;
}
Run Code Online (Sandbox Code Playgroud)

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

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

kyn*_*tto 12

const char* str;
Run Code Online (Sandbox Code Playgroud)

表示指向const数据的非const指针.

char* const str;
Run Code Online (Sandbox Code Playgroud)

表示指向非const数据的const指针.

const char* const str;
Run Code Online (Sandbox Code Playgroud)

表示指向const数据的const指针.

原因是在C++中,变量类型声明从右到左进行解析,这导致单词"const"始终定义它最接近的事物的常量.


Fre*_*son 5

这不是声明指针const,它宣告了东西指着作为const.试试这个:

int s(const char* const str)
Run Code Online (Sandbox Code Playgroud)

使用此声明,修改时应该出现编译错误str.