跪求高手: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;
}
//请帮忙分析一下字符串常量在内存中是否另外开辟空间,并且此空间只能读不能写? 展开
#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;
}
//请帮忙分析一下字符串常量在内存中是否另外开辟空间,并且此空间只能读不能写? 展开
9个回答
展开全部
char *str = "AABBCCDDAABBCCDD";
这种方法创建字符串,你创建的是一个指针,它所指向的字符串是常量区的一个字符串
"AABBCCDDAABBCCDD"
这是在常量区的一个字符串,它内部的任意一个成员的值都是不可改变的
char a[20]="AABBCCDDAABBCCDD";
而这就不同了,这样的话,你创建的是一个数组,你是在栈区创建了一个字符数组,所以它内部的成员是可以改的
这就是char *str 和 char str[] 的区别,一个是指针,一个是数组
这种方法创建字符串,你创建的是一个指针,它所指向的字符串是常量区的一个字符串
"AABBCCDDAABBCCDD"
这是在常量区的一个字符串,它内部的任意一个成员的值都是不可改变的
char a[20]="AABBCCDDAABBCCDD";
而这就不同了,这样的话,你创建的是一个数组,你是在栈区创建了一个字符数组,所以它内部的成员是可以改的
这就是char *str 和 char str[] 的区别,一个是指针,一个是数组
展开全部
字符数组变量与字符指针之间的差别。
char a[]="123456";
char *p;
实际上第一个是定义静态的变量。完整格式应该是这样的:static char a[]="123456"
char *p;则不是这样。列:
p=p+7,完全没问题。但是a=a+7,就错了。
数组和指针的访问方式也有点区别。指针字符串,后面必须要有'\0',否则指针是不知道到哪儿是字符串结束的,而数组则没此限制。
char a[]="123456";
char *p;
实际上第一个是定义静态的变量。完整格式应该是这样的:static char a[]="123456"
char *p;则不是这样。列:
p=p+7,完全没问题。但是a=a+7,就错了。
数组和指针的访问方式也有点区别。指针字符串,后面必须要有'\0',否则指针是不知道到哪儿是字符串结束的,而数组则没此限制。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串常量放在内存中的常量区,这个区域是只读的
①前面加一个static也可以的
①前面加一个static也可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是的,在给指针赋字符串值的时候,相当于在内存中开辟一串空间给字符串,这个字符串的首地址告知该指针变量。空间内的变量是固定的,所以只能读取不能写入。
但是,如果是用数组赋值字符串,然后再用指针指向该数组。数组的空间是RAM的分配的,是可变化的,所以通过指针是可以间接的对数组的成员进行操作的。
但是,如果是用数组赋值字符串,然后再用指针指向该数组。数组的空间是RAM的分配的,是可变化的,所以通过指针是可以间接的对数组的成员进行操作的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我不知道你是怎么出错的 ,直接写char *str=“”是没问题的,给字符串赋值以后再修改也是可以的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询