c语言地址传送的问题

来源:百度知道 编辑:UC知道 时间:2024/04/30 13:59:56
程序1:
#include <stdio.h>
void change(char *ChangeData)
{
ChangeData="change";
}
void main()
{
char *a="i love china!";
change(a);
printf("%s",a);
}
//运行结果:i love china!

程序2:
#include <stdio.h>
#include <string.h>
void change(char *ChangeData)
{
strcpy(ChangeData,"change");
}
void main()
{
char *a="i love china!";
change(a);
printf("%s",a);
}
//运行结果:change

问题:为什么程序1结果a值不发生变化而程序2中结果改变了?

请高手形象具体地分析下两者的区别,程序2的过程详细点。谢了。。

#include <stdio.h>
void change(char *ChangeData)
{
printf("ChangeData = 0x%08x <%s>\n", ChangeData,ChangeData);
ChangeData="change";/*这个语句只是改变了局部变量ChangeData的值,可以比较一下两个打印的输出,就是说ChangeData原来指向传入的字符串a,执行之后ChangeData指向常量字符串"change",传入的a的值并没有改变*/
printf("ChangeData = 0x%08x <%s>\n", ChangeData,ChangeData);
}
void main()
{
char *a="i love china!";
change(a);
printf("%s",a);
getch();
}
--------------------------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
void change(char *ChangeData)
{
/*strcpy(ChangeData,"change");*/
/*为方便理解,用strcpy的代码替换strcpy函数*/
char *p="change";
char *q=p;
while(*ChangeData++=*q++);
/*用的是*ChangeData,这样就改变了ChangeData指向的内存的值*/
}

void main()