为什么strlen的参数是"常量"?

con*_*com 3 c pointers prototype function strlen

我正在学习C语言.

我的问题是:为什么strlen的参数是"常量"?

size_t strlen(const char * string);
Run Code Online (Sandbox Code Playgroud)

我在想它是因为字符串是一个地址所以它在初始化后不会改变.如果这是正确的,这是否意味着每次使用指针作为参数构建函数时,它应该设置为常量?

就像我决定构建一个将int变量设置为double的函数一样,它应该被定义为:

void timesTwo(const int *num)
{
    *num *= 2;
}
Run Code Online (Sandbox Code Playgroud)

要么

void timesTwo(int *num)
{
    *num *= 2;
}
Run Code Online (Sandbox Code Playgroud)

或者它没有任何区别?

das*_*ght 8

C字符串是指向零终止字符序列的指针.const前面char *指示编译器和程序员调用strlen不会修改string指针指向的数据的函数.

当你看到这一点时,这一点更容易理解strcpy:

char * strcpy ( char * destination, const char * source );
Run Code Online (Sandbox Code Playgroud)

它的第二个论点是const,但它的第一个论点不是.这告诉程序员第一个指针指向的数据可能被函数修改,而第二个指针指向的数据在返回时将保持不变strcpy.