C:const vs no const ..如何编译?

时间:2009-11-02 01:03:41

标签: c const

我有一个简单的C函数,我声明为:

int strLen(const char* str_)
{
  str_ = (char*) 0;
  return 0;
}

编译时我感到非常惊讶!那是为什么?

虽然这个onedoes没有编译(这是有道理的):

int str(const int i_)
{
  i_ = 0;
  return 0;
}

3 个答案:

答案 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;