const char*, char const*, char*const 的区别 - 菜鸟教程
文章推薦指數: 80 %
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:把一个声明从右向左读。
char * const cp; ( * 读成pointer to ) cp is a const pointer to char ...
菜鸟教程--学的不仅是技术,更是梦想!
首页
笔记首页
Android
ES6教程
排序算法
Hadoop
Zookeeper
Verilog
编程技术
程序员人生
首页
Android
ES6
逗乐
Search
constchar*,charconst*,char*const的区别 分类编程技术
Bjarne在他的TheC++ProgrammingLanguage里面给出过一个助记的方法:把一个声明从右向左读。
char*constcp;(*读成pointerto)
cpisaconstpointertochar
constchar*p;
pisapointertoconstchar;
charconst*p;
同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。
C++标准规定,const关键字放在类型或变量名之前等价的。
constintn=5;//sameasbelow
intconstm=10;
constint*p;//sameasbelowconst(int)*p
intconst*q;//(int)const*p
char**p1;
//pointertopointertochar
constchar**p2;
//pointertopointertoconstchar
char*const*p3;
//pointertoconstpointertochar
constchar*const*p4;
//pointertoconstpointertoconstchar
char**constp5;
//constpointertopointertochar
constchar**constp6;
//constpointertopointertoconstchar
char*const*constp7;
//constpointertoconstpointertochar
constchar*const*constp8;
//constpointertoconstpointertoconstchar
说到这里,我们可以看一道以前Google的笔试题:
constchar*p="hello";
foo(&p);//函数foo(constchar**pp)下面说法正确的是[]
A.函数foo()不能改变p指向的字符串内容。
B.函数foo()不能使指针p指向malloc生成的地址。
C.函数foo()可以使p指向新的字符串常量。
D.函数foo()可以把p赋值为NULL。
至于这道题的答案是众说纷纭。
针对上面这道题,我们可以用下面的程序测试:
#include
在foo函数中,可以使main函数中的p指向NULL。
在foo函数中,可以使main函数中的p指向由malloc生成的内存块,并可以在main中用free释放,但是会有警告。
但是注意,即使在foo中让p指向了由malloc生成的内存块,但是仍旧不能用p[1]='x';这样的语句改变p指向的内容。
在foo中,不能用(*pp)[1]='x';这样的语句改变p的内容。
所以,感觉gcc只是根据const的字面的意思对其作了限制,即对于constchar*p这样的指针,不管后来p实际指向malloc的内存或者常量的内存,均不能用p[1]='x'这样的语句改变其内容。
但是很奇怪,在foo里面,对p指向malloc的内存后,可以用snprintf之类的函数修改其内容。
←Python中下划线的5种含义
Composer安装与使用→
点我分享笔记
取消
分享笔记
昵称昵称(必填)
邮箱邮箱(必填)
引用地址引用地址
教程列表
ADO教程
Ajax教程
Android教程
Angular2教程
AngularJS教程
AppML教程
ASP教程
ASP.NET教程
Bootstrap教程
Bootstrap4教程
Bootstrap5教程
C教程
C#教程
C++教程
CSS参考手册
CSS教程
CSS3教程
Django教程
Docker教程
DTD教程
ECharts教程
Eclipse教程
Firebug教程
FontAwesome图标
Foundation教程
Git教程
Go语言教程
Google地图API教程
Highcharts教程
HTMLDOM教程
HTML参考手册
HTML字符集
HTML教程
HTTP教程
ionic教程
iOS教程
Java教程
JavaScript参考手册
Javascript教程
jQueryEasyUI教程
jQueryMobile教程
jQueryUI教程
jQuery教程
JSON教程
JSP教程
Julia教程
Kotlin教程
Linux教程
Lua教程
Markdown教程
Matplotlib教程
Maven教程
Memcached教程
MongoDB教程
MySQL教程
Node.js教程
NumPy教程
Pandas教程
Perl教程
PHP教程
PostgreSQL教程
Python3教程
Python基础教程
R教程
RDF教程
React教程
Redis教程
RSS教程
Ruby教程
Rust教程
Sass教程
Scala教程
SciPy教程
Servlet教程
SOAP教程
SQL教程
SQLite教程
SVG教程
SVN教程
Swift教程
TCP/IP教程
TypeScript教程
VBScript教程
Vue.js教程
Vue3教程
W3C教程
WebService教程
WSDL教程
XLink教程
XMLDOM教程
XMLSchema教程
XML教程
XPath教程
XQuery教程
XSLFO教程
XSLT教程
数据结构
正则表达式
测验
浏览器
网站品质
网站建设指南
网站服务器教程
设计模式
在线实例
·HTML实例
·CSS实例
·JavaScript实例
·Ajax实例
·jQuery实例
·XML实例
·Java实例
字符集&工具
·HTML字符集设置
·HTMLASCII字符集
·JS混淆/加密
·PNG/JPEG图片压缩
·HTML拾色器
·JSON格式化工具
·随机数生成器
最新更新
·
如何判断JavaSc...
·
JavaScriptNumb...
·
JavaScriptNumb...
·
JavaScriptNumb...
·
JavaScriptNumb...
·
jQuery判断元素...
·
JavaScript删除...
站点信息
·
意见反馈
·
免责声明
·
关于我们
·
文章归档
关注微信
Copyright©2013-2022菜鸟教程
runoob.comAllRightsReserved.备案号:闽ICP备15012807号-1
微信关注
延伸文章資訊
- 1C++ const char\*与char\* const_Summit_Yue的博客 - CSDN博客
C++ const char*与char* constC++里的const char*和char* const一直很容易混,其实只要理解了const到底修饰的哪个,就会豁然开朗。
- 2When to use const char * and when to use const char []
If you do not need to modify the data, using const char text[] reduces the number of relocations ...
- 3在C++ 中将std::string 转换为const char* - Techie Delight
这篇文章将讨论如何在C++ 中将std::string 转换为const char*。返回的指针应指向一个char 数组,该数组包含与字符串对象中存在的字符序列相同的字符序列,并在末尾附加 ...
- 4const char*, char const*, char*const 的区别 - 菜鸟教程
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:把一个声明从右向左读。 char * const cp; ( * 读成pointer to )...
- 5C++中string、char *、char[]、const char*的轉換 - IT人
源格式賦值為具體的內容,目標格式賦值為空。 C++中string、char *、char[]、const char*的轉換. 總結如下:. A.