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

siv*_*udh 2 c const

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

int strLen(const char* str_)
{
  str_ = (char*) 0;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

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

int str(const int i_)
{
  i_ = 0;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

pmg*_*pmg 15

因为const char* str_说str_是指向const字符的指针.

您可以更改str_本身,但不能更改它指向的内容.

int strLen(const char* str_)
{
  str_ = (char*) 0; /* allowed */
  str_[0] = '\0'; /* not allowed */
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 更重要的是,这个指针是由*value*拍摄的,原来的功能绝对没有! (3认同)

Jam*_*lis 11

在第一个中,您正在更改指针str_指向的内容; 指针str_不是const; 它只是指向const数据.你可以使指针const如下:

int strLen(const char* const str_)
Run Code Online (Sandbox Code Playgroud)


Art*_*ius 6

这遵循C声明的惯例,

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

意味着*str会给你一个char(或换句话说,str是一个指向char的指针).同样的,

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

意味着*str会给你一个const char,或换句话说,str是一个指向常量字符的指针.所以,你不能改变*str,但你可能会改变str.

如果你想str自己const,请使用以下语法:

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