C:常量与未常量..how走到这编译? [英] C: const vs no const ..how come this compiles?

查看:113
本文介绍了C:常量与未常量..how走到这编译?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  INT的strlen(为const char * str_)
{
  str_ =(字符*)0;
  返回0;
}

我觉得很奇怪,那编译!这是为什么?

而这onedoesn't编译(这是有道理的):

  INT STR(const int的I_)
{
  I_ = 0;
  返回0;
}


解决方案

由于为const char * str中_ 表示,str_是一个指向字符常量的。

您可以str_本身的改变,但不是它指向的。

  INT的strlen(为const char * str_)
{
  str_ =(字符*)0; / *宠物* /
  str_ [0] ='\\ 0'; /* 不允许 */
  返回0;
}

I have a simple C function which I declare as:

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

I was very surprised that that compiles! Why is that?

Whereas this onedoesn't compile (which makes sense):

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

解决方案

Because const char* str_ says that str_ is a pointer to const characters.

You can change str_ itself, but not what it points to.

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

这篇关于C:常量与未常量..how走到这编译?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆