const char * 、 char const * 和 char * const
来源:互联网 发布:淘宝卖家让我售后 编辑:程序博客网 时间:2024/05/21 06:44
结论
const char*
值不可变,指针可变;
char const*
同上;
char* const
指针不可变,值可变;
注:值不可变指的是不能通过指针修改指向的值,如:
*pa = 'a';pb[1] = 'a';
但是值本身依然可变,如:
buf[1] = 'h';
原因
const修饰的是它后面的东西,因此三种形式const修饰的分别是
const char* pa
修饰*pa(*pa是值,因此值不可变,指针可变);
char const* pa
同上;
char* const pa
修饰pa(pa是指针,因此指针不可变,值可变);
例子
#include<iostream>using namespace std;int main(){ char buf[] = "ha"; char buf2[] = "ha"; const char* pa = buf; char const* pb = buf; char* const pc = buf; //*pa = 'a';// 不能通过指针修改指向的值 //pb[1] = 'a';// 不能通过指针修改指向的值 *pc = 'a'; buf[1] = 'h'; pa = buf2; pb = buf2; //pc = buf2;// 不能修改指针的指向(地址) cout << "pa is " << pa << endl; cout << "pb is " << pb << endl; cout << "pc is " << pc << endl; return 0;}
输出
pa is hapb is hapc is ah
如果把注释去掉,会发生如下错误:
1>e:\program\test\test\源.cpp(10): error C3892: “pa”: 不能给常量赋值1>e:\program\test\test\源.cpp(11): error C3892: “pb”: 不能给常量赋值1>e:\program\test\test\源.cpp(15): error C3892: “pc”: 不能给常量赋值
总结
const char *
与char const*
效果一样,指针指向地址可变,值不可变,即不能通过指针修改对应的值;
char * const
则是不允许修改指针自身,即不能再指向其他地方,但是可以通过指针修改对应的值,即指针为常量;
这三者在实际应用中容易混淆,建议不要使用。
1 0
- const char * 、 char const * 和 char * const
- const+char*+和+char*+const
- const char*和char* const
- const char*和char* const
- char *和const char *
- const char & char const
- const char* char*const
- const char*,char *const,const char*const
- const char*,char *const,const char*const
- const char * 和 char const * 和 char * const 区别
- const char * 和 char const * 和 char * const 区别
- const char * 和 char const * 和 char * const 区别
- const char * 和 char const * 和 char * const 区别
- const char*, char const* and char *const
- const char*, char const* and char *const
- const char* ; char const *; char* const;
- const char*, char const* and char *const
- 关于const char*, char const*, char*const
- cocoapods使用指南【转】
- Java开发WebService
- mui官网
- Android 简易指南针
- 第十二周课后作业——项目一——算1*3*...*n
- const char * 、 char const * 和 char * const
- hive集群安装(hive-2.1.0)
- Qt的提示功能(三种提示框)
- TensorFlow官方教程学习 基本使用
- Cannot map 'XXXController.Create' bean method
- js 变量声明 (var使用与不使用的区别)
- 文本框模糊匹配(纯html+jquery简单实现)
- SSH框架下过滤器设置解决润乾报表问题
- Android端通过Okhttp与PHP服务器进行交互并实现文件上传下载(一)