//引用赫伯特·希尔特//
这是第一个代码
void change(char *);
int main(void)
{
char target[80]="hello";
change(target);
printf("%s",target);//printing aaaaa
return 0;
}
void change(char *tar)
{
int i;
for(i=0;i<strlen(tar);i++)
{
tar[i]='a';
}
}
这是第二个代码
void change(char *);
int main(void)
{
char target[80]="hello";
change(target);
printf("%s",target);/printing hello
return 0;
}
void change(char *tar)
{
int i;
tar="aaaaa";
}
尽管没有通过地址
target
为什么字符串在
target
在第一个代码中被改变,但在第二个代码中没有改变
为什么要打印第一个代码
aaaaa
和第二个代码打印
hello
最佳答案
第一段代码更改 tar
指向的字符的内容。第二块改变局部变量 tar
本身指向不同的内存位置,而不是原来指向的内存的内容。因此,main()
中的原始内容在第二种情况下被保留。
关于c - 为什么在第一个代码中更改了实际参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21077991/