char *p = "abcdefg"; p[0] = p[1]出错
来源:互联网 发布:苹果5没有移动3g网络吗 编辑:程序博客网 时间:2024/05/22 22:47
参考:http://blog.sina.com.cn/s/blog_5c0172280100ut4o.html
1、char *s="abc";
看这个赋值:
右边,是"abc",是个字符串常量,存在于内存某处(我的机器上是ds:0x0046f034),程序员不知道,编译器安排的,也没必要知道(当然,这个赋值之后,程序员就知道并能控制这个串了)。字符串常量所在内存是只读的。
左边,字符指针s,赋值时候,把地址ds:0x0046f034的偏移地址("abc"所在),存放到指针变量s(其地址为 ds:0x0046f034)中。程序员能完全控制的内存只是指针变量所占据的这四个字节内存,只能改变该指针的指向,至于其指向的内存能不能写,那就看程序了,本程序是指向的只读内存,不能写!
2、char str[]="abccd";
再看这个赋值:
右边,和上面类似,是"abccd",也是个字符串常量,存在于内存某处(是ds:0x0046f02c),程序员不知道,编译器安排的(这个赋值之后,程序员还是不知道这个常量在哪里,因为并没有用指针指向这块内存,这和上面不同)。该字符串常量所在内存也是只读的。
左边,字符数组str,赋值时候,把地址ds:0x0046f02c("abccd"所在)所指内存中的内容,复制到字符数组str开始(其地址为 ds:0x0013ff74)的内存中,每复制一个字符都会开辟一个字节(char型变量占1字节)内存来存放这个字符(这也是实现了数组元素个数的动态确定)。从字符数组str开始的这部分存放这些字符的内存是程序员可以完全控制的,可读写,因此在这些内存写当然是没有问题的!
0 0
- char *p = "abcdefg"; p[0] = p[1]出错
- char *p = "world";
- 从客户端(textarea="<p>wewqe</p>")中检测到有潜在危险的 Request.QueryString 值。
- char *p=new char
- char *p=new char
- <?php echo "<p>test</p>";
- p=p->next
- char* p="abc"与char p[] = "abc"区别
- char* p = new char [20] delete p 出现问题!
- char* p = "abc" error
- (char *)&p[x]=x
- char* p="ddddd";==>const char*p="ddddd";char p[]="ddddd";
- char*p char p [] char* p[]
- 为什么phi(p^n)=p^n-p^(n-1)
- 深入理解利用new创建对象的执行过程以Person p=new Person("张三",20);为例
- char *p
- char *p = new char[256]; delete p; / delete[] p; 哪个对 为什么
- C++ char * p char p[] sizeof(p)
- 乐观锁与悲观锁
- 物体表面滚动纹理
- iOS导入字体
- Apache Tomcat安装、配置、启动与后续操作步骤
- jsp 400 The request sent by the client was syntactically incorrect. springMVC
- char *p = "abcdefg"; p[0] = p[1]出错
- mysql之触发器trigger
- Property Animation属性动画,还用补间动画你就out了
- android颜色
- 不同技能的测试工程师是如何正确的进行自动化测试
- 1.5.5 HTML表单处理
- 去掉UIWebView底部的黑条
- Service1
- 关于烂代码的那些事(上)