首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于C++指针的有关问题

2012-10-18 
关于C++指针的问题C/C++ code#includeiostream#includecstring#includecstdlib#includecstdio#inc

关于C++指针的问题

C/C++ code
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cassert>using namespace std;char * reversal(char *str,int i,int j){    char temp;    while(i<j)    {        temp=str[i];        str[i]=str[j];        str[j]=temp;        i++;        j--;    }    return str;}char * rightshift(char *str,int n){    int len=strlen(str);    n=(n%len+len)%len;    reversal(str,0,len-n-1);    reversal(str,len-n,len-1);    reversal(str,0,len-1);    return str;}int main(){    char  *str="abvdefghi";    printf("%s\n",rightshift(str,-2));    return 0;}

这个代码运行时报错
C/C++ code
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cassert>using namespace std;char * reversal(char *str,int i,int j){    char temp;    while(i<j)    {        temp=str[i];        str[i]=str[j];        str[j]=temp;        i++;        j--;    }    return str;}char * rightshift(char *str,int n){    int len=strlen(str);    n=(n%len+len)%len;    reversal(str,0,len-n-1);    reversal(str,len-n,len-1);    reversal(str,0,len-1);    return str;}int main(){    char  str[]="abvdefghi";    printf("%s\n",rightshift(str,-2));    return 0;}

这个运行不报错

请教这是为什么?

[解决办法]
1 char *str="abvdefghi";
2 char str[]="abvdefghi"

1 编译器把这个字符串变成字符串常量放在常量数据区中。所以不能更改。。
2 编译器把字符串放到内存中。。是可以更改的。;


嗯哪。。大概是这样的。
[解决办法]
楼主看看这个帖子
[解决办法]
那是因为char *str="abvdefghi";中,str 指向的是常量区,常量区中的值是不允许更改的。
char *str="abvdefghi";他就等同于 const char p[] = "abvdefghi";char *str = p;
所以LZ 第一段代码运行到这里str[i]=str[j];就会出错。

热点排行