跪求高手:C\C++字符串常量(即字符数组)、字符数组变量与字符指针之间的差别? 代码见补充:

/*计算字符数组"AABBCCDDAABBCCDD"中'B'的个数,并每计算一次便将'B'去掉,后面所有的字符自动向前移一位*/#include<iostream.h>v... /*计算字符数组"AABBCCDDAABBCCDD"中'B'的个数,并每计算一次便将'B'去掉,后面所有的字符自动向前移一位*/
#include <iostream.h>

void main( )
{
char *str = "AABBCCDDAABBCCDD"; // ①
//char a[20]="AABBCCDDAABBCCDD";// ②
//char *str=a;//③
//将①改为②、③则不会出错,为什么?
for( int i=0; *str!='\0'; str++)
{
if( *str=='B' )
{
i++;
for( int j=0; *(str+j)!='\0'; j++ )
{
cout<<*(str+j)<<endl; /*能输出,说明此地址能读*/
*(str+j) = *(str+j+1); /*编译、连接都不会出错,执行时弹出对话框报错,程序停止执行*/
}
}
}
cout<<"AABBCCDDAABBCCDD中有"<<i<<"个B!"<<endl;
}

//请帮忙分析一下字符串常量在内存中是否另外开辟空间,并且此空间只能读不能写?
展开
 我来答
软件哲学
2011-09-02 · TA获得超过494个赞
知道小有建树答主
回答量:791
采纳率:100%
帮助的人:568万
展开全部
char *str = "AABBCCDDAABBCCDD";
这种方法创建字符串,你创建的是一个指针,它所指向的字符串是常量区的一个字符串
"AABBCCDDAABBCCDD"
这是在常量区的一个字符串,它内部的任意一个成员的值都是不可改变的
char a[20]="AABBCCDDAABBCCDD";
而这就不同了,这样的话,你创建的是一个数组,你是在栈区创建了一个字符数组,所以它内部的成员是可以改的
这就是char *str 和 char str[] 的区别,一个是指针,一个是数组
supersunkaiyua
2011-09-02 · TA获得超过770个赞
知道小有建树答主
回答量:415
采纳率:100%
帮助的人:191万
展开全部
字符数组变量与字符指针之间的差别。
char a[]="123456";
char *p;
实际上第一个是定义静态的变量。完整格式应该是这样的:static char a[]="123456"
char *p;则不是这样。列:
p=p+7,完全没问题。但是a=a+7,就错了。
数组和指针的访问方式也有点区别。指针字符串,后面必须要有'\0',否则指针是不知道到哪儿是字符串结束的,而数组则没此限制。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HarborLee
2011-09-04 · TA获得超过1007个赞
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:111万
展开全部
#include<iostream>
using namespace std;

int main()
{
char str[17]="AABBCCDDAABBCCDD";
char s='B';
for(int i=0;i<17;i++)
{
if(str[i]!=s)
cout<<str[i];
}
cout<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
人生如雾亦如梦
2011-09-02 · TA获得超过509个赞
知道小有建树答主
回答量:358
采纳率:0%
帮助的人:207万
展开全部
字符串常量放在内存中的常量区,这个区域是只读的
①前面加一个static也可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lin61217
2011-09-03
知道答主
回答量:4
采纳率:0%
帮助的人:3.4万
展开全部
是的,在给指针赋字符串值的时候,相当于在内存中开辟一串空间给字符串,这个字符串的首地址告知该指针变量。空间内的变量是固定的,所以只能读取不能写入。
但是,如果是用数组赋值字符串,然后再用指针指向该数组。数组的空间是RAM的分配的,是可变化的,所以通过指针是可以间接的对数组的成员进行操作的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哀傷の霜之哀傷ba69
2011-09-02 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:120万
展开全部
我不知道你是怎么出错的 ,直接写char *str=“”是没问题的,给字符串赋值以后再修改也是可以的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式