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

定义字符串指针的两种模式,内部有什么区别?执行效果为何大不相同

2012-10-23 
定义字符串指针的两种方式,内部有什么区别?执行效果为何大不相同?方式一:char p[]{0123456789}char *a

定义字符串指针的两种方式,内部有什么区别?执行效果为何大不相同?
方式一:
char p[]={"0123456789"};
char *a=p;
方式二:
char *a={"0123456789"};

在使用指针a的过程中,发生区别的地方在于调用如下子函数(自己写的字符串倒置函数);
现象:向子函数传递方式二定义的指针会导致调试错误(编译通过了的),“Unhandle exception in *.exe:0xc0000005:Access Violation”
void changeLP( char *str)
{
char a;
if(str!=NULL)
{
unsigned int len=strlen(str);
for(unsigned int i=0; i<(len/2); i++)
{
a=*(str+i);
*(str+i)=*(str+len-1-i);
*(str+len-1-i)=a;
}
}
}
传递进方式一的指针a,就顺利执行。

我是自学C,基础不是很好。求解惑。
方式二定义的指针在主函数中执行printf("%d\n",*(a+3))打印都没有错的。

[解决办法]
char *p = “hello”;
和:
char p[] = “hello”;

区别:

第一个把一个常量字符串存入只读数据段,并用p指针指向其首位。后续程序可以通过该指针读取字符串内容,但不能改写。

第二个把字符串复制到栈空间里,并将此位置命名为 char p[]。后续程序可以通过字符数组p读取、更改该字符串,但不能改写p自身。

热点排行