C指针-const char* p到底是什么不可以改变
char a = 'w';
char b = 'q'; const char* p = &a;
p = &b;
printf("%c",p[0]);
如上一段代码,最终代码输出q。不是有const修饰嘛?为什么仍然可以改变哪?
指针存在的价值在于让我们修改。如一下代码:会报一个警告deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char *msg;
msg = "hello";
因为指针是修改,char *背后的含义是:给我个字符串,我要修改它。所以应该给msg赋值一个地址,而不是一个常量字符串。如果确实给msg一个常量字符串,则会出现莫名错误,在Eclipse下自己退出,如下程序,是无运行的。
char *msg;
msg = "hello";
msg = "good-bye";
*msg = 'w';
好,接着说const的问题。const char* p = &a;这句话的意思是*p指向&a,且*p有只读权限,不能通过*p修改a的内容。当然仍然可以通过a直接修改内容。
const char* p ;
p = &a;
a = 'k';
//p = &b;
//*p='k';
printf("%c",p[]);
所以,const的问题是,值通过指针对内存有什么样的操作权限。char*p,可以做任何操作。const char *p 对这一块内容只能读。
C指针-const char* p到底是什么不可以改变的更多相关文章
- const char * 的终结贴(看完无需其他任何文章,从此不再蛋疼)
我之前也是以为我对const char *ptr 这种形式的写法是掌握了的,真的,不就是说一个指针是不可改变的吗? 那么问题就来了,到底是ptr指针本身不能改变,还是ptr执行的值不能改变呢? 从网上 ...
- C语言中为什么不能把char**赋给const char**
这是我在知乎回答的一个问题. 这个问题是C中的一个深坑,首先说结论: char ** 和 const char ** 是两个不相容(incompatible)的类型,能够理解为不能直接赋值 在C11的 ...
- 【QT】QString类型转换为const char*(toLatin1)
Qstring str = "helloworld"; char *s; QByteArray ba = str.toLatin1(); s = ba.data(); toLati ...
- const char and static const char
部分内容摘自:https://blog.csdn.net/ranhui_xia/article/details/32696669 The version with const char * will ...
- 【C/C++】字符数组:char,char*,char a[], char *a[], char **s 的区别与联系/const char*和char*的区别
一.char,char*,char a[], char *a[], char **s 的区别与联系 C语言中的字符串是字符数组,可以像处理普通数组一样处理字符串. 可以理解为在内存中连续存储的字符. ...
- int main (int argc, const char * argv[0]) 中参数的含义;指针数组和数组指针
恩,有的编译器初始化时候会产生这样的参数 argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名 1. 几种C++ 常见的参数种类 int main(void); in ...
- C++形参中const char * 与 char * 的区别
在函数调用时,我们经常看见一个函数的接受参数为(const char *); 例如strlen()函数,它的定义为: size_t strlen( const char *str); 那么将形参设置为 ...
- 实战c++中的string系列--string与char*、const char *的转换(data() or c_str())
在project中,我们也有非常多时候用到string与char*之间的转换,这里有个一我们之前提到的函数 c_str(),看看这个原型: const char *c_str(); c_str()函数 ...
- 不能将参数1从“const char []”转换为“LPCTSTR
今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错.如下::不能将参数1从“const char []”转换为“LPCTSTR” 其解决方案就是, 在 ...
随机推荐
- Python转码问题的解决方法:UnicodeDecodeError:‘gbk' codec can't decode bytes in position
在开发过程中遇到了错误:UnicodeDecodeError: ‘gbk' codec can't decode bytes in position 678-679...这是因为遇到了非法字符, 解决 ...
- FZU 2112 并查集、欧拉通路
原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...
- 跟着百度学PHP[5]函数篇1-参数
ps:俺的文章俺懂就行.大家不要拿来学习不然每个人的学习思路不一样.看视屏文章的老师不同笔记不同加上我也是新手上路,还怕误导!请大家看行且思考,帮忙挖Bug也可以. 案例要求:你可以写一个两行三列的表 ...
- linux下 chown命令
对Document/ 目录下的所有文件与子目录执行相同的所有者变更,修改所有者为users用户组的username用户 chown -R username:users Document/ userna ...
- 【GoLang】golang 闭包 closure 参数传递的蹊跷!
结论: 闭包函数可以直接引用外层代码定义的变量, 但是,注意,闭包函数里面引用的是变量的地址, 当goroutine被调度时,改地址的值才会被传递给goroutine 函数. 介绍 go的闭包是一个很 ...
- Java 类初始化顺序
总的来说: 父类静态代码块->子类静态代码块->子类main()方法->父类构造块->父类构造方法->子类构造块->子类构造方法 注意,就算是静态的方法也需要调用才 ...
- android so调试时遇到的坑 - arm流水线
直接看下面这段ARM汇编: 此时运行到的代码为ADD R3,PC 此时看一下寄存器窗口的值: 按理来说执行完ADD R3,PC后的效果应该是R3=R3+PC ,R3=40A1D5C8 但是我们可以执行 ...
- kali2.0中dradis的使用方法
启动脚本位于:/usr/lib/dradis下,再该目录下有一个start.sh文件,执行后,可以在浏览器中输入https://localhost:3004即可打开dradis的web接口 切记前面h ...
- OSG透明代码
//关闭灯光 state->setMode(GL_LIGHTING,osg::StateAttribute::OFF|osg::StateAttribute::PROTECTED); //打开混 ...
- Gerrit管理帐号
文档 Gerrit服务器启动后,网站上有一个Documentation链接.点击后会看到四个选项: index,searching,uploading和access control 文档内容很多,不必 ...