环境:vs2010

说明:在阅读这部分内容之前应该先明确C++内存分配问题 ,那一篇文章说的比较清楚。

1.字符数组,初始化:

char str1[]="abc";
char str1[]={"abc"};
char str1[]={'a','b','c','\0'};//如果没有\0,运行通过,但有不可以意料的结果
char str1[]="abc";//字符数量<5,因为必须包含尾巴\0

一些操作:

str1[]='g';//更改字符串中某个值
cout<<str1;//输出字符串
printf("%s",str1);
strcpy(str1,"");//字符串拷贝
str1="";//更改字符串

一些正确使用和错误使用对比:

*str1="bcd";//错误,*str仅仅是指向字符串的首指针,因此*str1代表第一个字符,

*str1='1';//正确,更改第一个字符,字符串str1变为“1bc”

*str1++;//错误,这是char *str1的用法

2.字符指针,初始化:

char *str2="123";

char *str2=NULL;

char *str2=0;//同上一个,置为空

字符指针一些操作:

cout<<str2;//输出字符串
printf("%s",str2);
//strcpy(str2,"");//错误,指针字符串不能拷贝,
str2="";//更改字符串正确方法!!!

一些错误操作:

*str2="asdf";//错误,str2指向常量数据区,这样不能更改字符串

strcpy(str2,"");//错误,不能这样拷贝,常量数据区无法更改

*str2='q';//错误。同第一个,这更改的str2指向的常量数据区,而常量数据区是不能更改的!

PS1:由此可见字符数组和指针数组还是有很多相似的地方!也就是说,还有很多不同的地方(o(╯□╰)o废话)

PS2:*str2 = "asdf";中的str2为什么会指向内存常量区域呢?是因为编译器会在指针初始化时把*str2指向的内容当做常量处理,进而放在常量区域,因此不能修改。其实,编译器在给字符指针*str2赋值"123"时,会先查询常量区域是否有"123",如果有,会在栈中(假设是普通变量)生成一个直接指向这个常量地址的指针;如果没有,会先在常量区域生成"123"字符串,再在栈中生成一个指向这个常量地址的指针。这里要区别与new一个字符串的区别(new一个会在堆内存中分配一个新的"123",不管以前有没有,java中的String保留了这个规则,并且特别注意,C++中堆内存分配后,要用对应的delete/free释放内存!)。

最新文章

  1. JavaWeb基础学习体系与学习思路
  2. &quot;流&quot;派家族,一脉相承
  3. rabbitMQ学习(一)
  4. Piwik延迟加载脚本
  5. EhCache WebCache 与 SpringMVC集成时 CacheManager冲突的问题
  6. Row_Number() OVER 的用法
  7. Quartz.net misfire实践
  8. [51NOD1087]1 10 100 1000(规律,二分)
  9. 如何在VC中查询中文,及QT5的中文处理
  10. &lt;转&gt;HTML+CSS总结/深入理解CSS盒子模型
  11. js原生设计模式——2面向对象编程之继承—new类式继承
  12. Python学习笔记009_构造与析构
  13. 如何自学Python?
  14. osg做的路面项目
  15. CentOS6.8常用服务
  16. Part-Seven
  17. jQuery(三) javascript跨域问题(JSONP解决)
  18. android笔记:ListView及ArrayAdapter
  19. .net程序中http请求的超时配置
  20. response和request的setCharacterEncoding区别

热门文章

  1. celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)
  2. 20.Python略有小成(面向对象Ⅱ)
  3. git 学习笔记---操作标签
  4. 你也可以写个聊天程序 - C# Socket学习1
  5. js 杂症,this with 变量提升
  6. 2019 人民网java面试笔试题 (含面试题解析)
  7. Java之路---Day05
  8. 深入理解JVM(三) -- 对象的内存布局和访问定位
  9. 拓展 - Webrtc 的回声抵消(aec、aecm)算法简介
  10. FI-BTEs增强FIBF