形参为(指针,指针)时,实参为什么不能是(指针,指针)?

PMind 2010-09-13 04:03:10
#include<stdio.h>
void main(){
void copy_string(char *from,char *to);
char *a="Good!",*b="Error!";
//为什么一定要把*b修改成b[],才能正常运行呢?
printf("a=%s\n",a);
printf("b=%s\n",b);
copy_string(a,b);
printf("b=%s\n",b);
}
void copy_string(char *from,char *to){
while(*to++=*from++);
}
/*原意是把a的字符赋给b,b为数组,而不是指针时,程序正常,把实参b改为指针就出错了。
觉得那里不对,可是老是抓不住。请熟悉指针的高手给我一个详细透彻的说法,谢谢啦!
...全文
436 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nwao7890 2010-09-13
  • 打赏
  • 举报
回复
我也月经下
PMind 2010-09-13
  • 打赏
  • 举报
回复
多谢了,为什么不能马上结贴的。。。。
Csuxiaowu 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 csuxiaowu 的回复:]

把你的形参加上const 标识符
[/Quote]
哦 没看见 函数里面修改了
qf17331733 2010-09-13
  • 打赏
  • 举报
回复
*b 记录的仅仅是 b 的地址,只能记为b[]的首地址,所以copy_string(a,b);相当于把一个地址给另一个地址,这样不行,而b[]表示是一个字符串,其实b为他的首元素;自己翻下书,里面更详细。
shi3590 2010-09-13
  • 打赏
  • 举报
回复
char *b="Error!"相当于const char *b="Error!"
copy_string需要修改其指向,所以不行。
PMind 2010-09-13
  • 打赏
  • 举报
回复
明白了,多谢二位!
Jim_King_2000 2010-09-13
  • 打赏
  • 举报
回复
因为"Error"是常量,无法修改。改为b[]的话,则在栈上生成一份可修改的拷贝。月经贴了。
PMind 2010-09-13
  • 打赏
  • 举报
回复
#include<stdio.h>
void main(){
void copy_string(char *from,char *to);
char *a="Good!",*b="Error!";
//为什么一定要把*b修改成b[],才能正常运行呢?
printf("a=%s\n",a);
printf("b=%s\n",b);
copy_string(a,const b);
printf("b=%s\n",b);
}
void copy_string(char *from,char *to){
while(*to++=*from++);
}

出错:error C2059: syntax error : 'const'
冻结 2010-09-13
  • 打赏
  • 举报
回复
char *a="Good!",*b="Error!";

等价于
const char *a="Good!",*b="Error!";
内存分配在常量区。
不可改。

Csuxiaowu 2010-09-13
  • 打赏
  • 举报
回复
把你的形参加上const 标识符

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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