我想问为什么可以在不传递引用的情况下更改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;
}
任何人都可以向我解释一下吗?我以为指针正在被复制,所以我希望得到一个关于关闭文件的错误。令人惊讶的是我没有得到它。
答案 0 :(得分:3)
C中的参数按值传递,这意味着它们被复制。因此,函数永远不会有原始值,只需复制,修改副本当然不会修改原始值。
您可以使用指针模拟通过引用传递,并且在通过引用传递指针的情况下,您当然必须传递指向指针的指针(通过使用address-of operator { {1}})。
&
答案 1 :(得分:0)
它被复制,但它仍然指向同一个文件。