关于字符串指针动态分配内存和赋初值(初学者求教)

0zien0 0zien0 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我被string,char,char*,char[],弄到思维乱七八糟了,望各位大大帮我整理下思维- -!


char a[] = "abc";//自动分配4个内存(包含'/0')的字符串数组;
char *cpa = a;//指向数组a的首地址
【问题1:cpa指针已经分配空间给他了?没有new空间给他哦?】
char *cpb = new char[100];//为cpb分配100个字符大小的空间
cpb = a; //把cpb指向数组a的首地址
【问题2:这种方法和上面的方法有什么区别啊?是不是这里分配了100个字符大小的空间给指针,但指针每次指向一个字符,所以是在浪费空间?】
cout<<cpb<<endl;//输出结果为abc
【问题3:我知道*cpb是输出当前指针所指向地址的值'a',但输出cpb指针的结果是整个字符串abc,cpb是一个字符指针,指向一个字符串,怎么会输出整个字符串而不是一个字符呢?难道系统自动做了遍历?】

char *cpc = "def";//cpc指针指向字符串首地址
【问题4:和问题1类似,这指针已经分配空间给他了?】

string b;
b = cpc;
【问题5:估计这个关于STL里面的string,用sring 定义了一个字符串常量b(而非指针)怎么可以把一个字符指针cpc赋值给字符串常量b的?】

【问题6: char *p = "abc" 对比 char e[] = "abc"; char *p = e;的区别】
个人猜想: 前者没为字符串申请空间,所以不能改动指针所指向的值,而后者所分配的空间则为4个字符大小的空间,所以只能删减字符而不能增加字符。

最后一个问题- -!!这就是实际操作中遇到的问题。
const char *a = 【调用一个函数,其返回值为("const char *x")】; //获取一段字符串
编译没错,但调试跟踪数据时,却说“错误的指针”,后来发现是因为指针a没有初始化和分配内存空间。
我随便写了个简单的相似的例子
const char *m = "poi";
const char *n = m;
cout<<n<<endl;
为什么这样子又不用申请空间就直接可以运行呢?

我思路很乱,问题很多,望各位热心人士帮忙解答



...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
0zien0
C++ 语言 65,214 成员 250,514 内容