C++

char str[]="abcde abcde";

char* str="abcde abcde";

在程序赋初值的时候一定要注意了。解释如下:

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开始的这部分存放这些字符的内存是程序员可以完全控制的,可读写,因此在这些内存写当然是没有问题的!


阅读更多
上一篇C++ 访问权限
下一篇thinkcmf二次开发,上传云服务器,遇到的问题记录
想对作者说点什么? 我来说一句

C++课件(基础篇)入门,但需要C基础

2010年06月23日 2.37MB 下载

C++,栈,队列,链表

2011年07月08日 1.65MB 下载

C++使用指南1111111111111111

2009年10月12日 4.56MB 下载

c++\c++复习题

2010年09月10日 206KB 下载

c++实例c++实例

2010年11月14日 101KB 下载

c++习题汇总答案 答案

2011年06月07日 75KB 下载

C++笔记1111111111111111

2010年04月12日 288B 下载

C++著作】【C++著作】

2009年09月10日 9KB 下载

没有更多推荐了,返回首页

关闭
关闭