我有一个简单的C函数,我声明为:
int strLen(const char* str_) { str_ = (char*) 0; return 0; }
编译时我感到非常惊讶! 这是为什么?
虽然这个onedoes没有编译(这是有道理的):
int str(const int i_) { i_ = 0; return 0; }
因为const char* str_
表示str_是指向const字符的指针。
您可以更改str_本身,但不能更改它指向的内容。
int strLen(const char* str_) { str_ = (char*) 0; /* allowed */ str_[0] = ' '; /* not allowed */ return 0; }
在第一个中,您正在更改指针str_
指向的内容; 指针str_
不是const; 它只是指向const数据。 你可以使指针const如下:
int strLen(const char* const str_)
这遵循C声明的惯例,
char *str;
意味着*str
会给你一个char
(换句话说, str
是一个指向char的指针)。 同样的,
const char *str;
意味着*str
将为您提供一个const char
,或者换句话说, str
是一个指向const char
的指针。 所以,你不能改变*str
,但你可以改变str
。
如果要使str
本身为const
,请使用以下语法:
char *const str;
以上就是c/c++开发分享C:const vs no const ..如何编译?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/559869.html