我有一个简单的C函数,我声明为:
int strLen(const char* str_)
{
str_ = (char*) 0;
return 0;
}
编译时我感到非常惊讶!那是为什么?
虽然这个onedoes没有编译(这是有道理的):
int str(const int i_)
{
i_ = 0;
return 0;
}
答案 0 :(得分:15)
因为const char* str_
表示str_是指向const字符的指针。
您可以更改str_本身,但不能更改它指向的内容。
int strLen(const char* str_)
{
str_ = (char*) 0; /* allowed */
str_[0] = '\0'; /* not allowed */
return 0;
}
答案 1 :(得分:11)
在第一个中,您正在更改指针str_
指向的内容;指针str_
不是const;它只是指向const数据。你可以使指针const如下:
int strLen(const char* const str_)
答案 2 :(得分:6)
这遵循C声明的惯例,
char *str;
表示*str
会给你一个char
(换句话说,str
是一个指向char的指针)。类似地,
const char *str;
表示*str
将为您提供const char
,换句话说,str
是指向常量字符的指针。因此,您不能更改*str
,但可以更改str
。
如果您想让str
本身const
,请使用以下语法:
char *const str;