//引用赫伯特·希尔特//

这是第一个代码

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/

10-11 22:45
查看更多