关于指向字符串的指针 char c[] 和 char *c 区别

cart55free99 2011-03-06 07:51:58
char c[]="abc"
char *c ="abc"

把c当做参数传入到另一个函数 这两种定义当时会有不同的结果, 为什么啊?
难道不一样吗? 我一直以为这里都一样。我记得书上讲的也是都指向abc这个char型数组的首地址啊?


第一个程序 运行正常。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
void main(){
Stu *head;
createLink( &head );
printf("%d\n",head );


char c[]="aaa" ;
poTest(c);

}

void poTest(char *p ){
printf("%c\n",*p );

char *end=p+3;
char *start=p;
for (;p<end;p++)
{
*p='b';
}

p=start;
for (;p<end;p++)
{
printf("%c",*p );
}
}

------------------------------------------------------------

???????? ???????????????????????

void main(){

char *c="dfg" ; // 这种定义方式和 char c[]="aaa" ; 难道不是一样的么?
char *end=c+2; //

poTest(c);
}

void poTest(char *p ){
char *start=p;
printf("%c\n",*p ); //p指向字母d
char *end=p+2; //end指向字母g

for (;p<end;p++) //这个循环报错?----- 而且要是把上面改成char c[]="dfg" 就OK了?
{
*p='b';

}
}
...全文
120 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ww884203 2011-03-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cart55free99 的回复:]

哇 这么快!@!
char *c ="abc" 定义是不能修改?
[/Quote]
指针可以修改,"abc"不能修改,也就是

*c = 'x'; //不允许
c = "xyz"; //可以
cart55free99 2011-03-06
  • 打赏
  • 举报
回复
哇 这么快!@!
char *c ="abc" 定义是不能修改?
pengzhixi 2011-03-06
  • 打赏
  • 举报
回复
char c[]="abc"
char *c ="abc"//相当于const char*c="abc"; 也就是说abc不可被修改。
liutengfeigo 2011-03-06
  • 打赏
  • 举报
回复
char *c ="abc"//像这样的'abc'字符串在常量区有存好.这里只是把常量区的这个字符串的首地址赋值给c.
char c[]="abc" //这个是用'abc'字符串去初始化字符数组C.
w0911h 2011-03-06
  • 打赏
  • 举报
回复
"abc"这是字面值,本身不可修改
char c[]="abc" 这个c是个字符数组,"abc"被拷贝到c数组里,c数组本身是可以修改的
char *c ="abc" 这个c是字符串指针,直接指向"abc"的地址,但"abc"是不可修改的,对其修改就会出错
ww884203 2011-03-06
  • 打赏
  • 举报
回复
char c[]="abc"
char *c ="abc"
这种问题很常见,分配的地方不一样。
第一种是在栈区分配内存,第二个是在常量区分配的内存,所以内容是不可改的。对它进行修改就会出错

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧