文件指针在C函数内部发生变化

时间:2015-02-11 12:12:13

标签: c file pointers

我想问为什么可以在不传递引用的情况下更改C函数中文件的指针值,我的意思是:

void fun(FILE *f)
{
    fclose(f);
    f = fopen("newfile", "r");
}

int main(void)
{
    FILE *old = fopen("file", "r");
    char *msg = (char*)malloc(sizeof(char) * 100);
    fun(old);
    fscanf(old, "%s", msg);
    printf("%s", msg);
    free(msg);
    return 0;
}

任何人都可以向我解释一下吗?我以为指针正在被复制,所以我希望得到一个关于关闭文件的错误。令人惊讶的是我没有得到它。

2 个答案:

答案 0 :(得分:3)

C中的参数按值传递,这意味着它们被复制。因此,函数永远不会有原始值,只需复制,修改副本当然不会修改原始值。

您可以使用指针模拟通过引用传递,并且在通过引用传递指针的情况下,您当然必须传递指向指针的指针(通过使用address-of operator { {1}})。

&

答案 1 :(得分:0)

它被复制,但它仍然指向同一个文件。