C函数内的文件指针更改
File pointer change inside a C function
我想问一下为什么可以在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;
}
谁能给我解释一下?我以为正在复制指针,所以我预计会收到有关已关闭文件的错误。没想到居然没看懂
已复制,但仍指向同一个文件。
C 中的参数按值 传递,这意味着它们被复制。所以函数永远不会有原始值,只有副本,修改副本当然不会修改原始值。
您可以通过使用指针来模拟通过引用传递,并且在通过引用传递指针的情况下,您当然必须将指针传递给指针(通过使用地址运算符 &
).
void fun(FILE **f)
{
fclose(*f);
*f = fopen("newfile", "r");
}
...
fun(&old);
我想问一下为什么可以在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;
}
谁能给我解释一下?我以为正在复制指针,所以我预计会收到有关已关闭文件的错误。没想到居然没看懂
已复制,但仍指向同一个文件。
C 中的参数按值 传递,这意味着它们被复制。所以函数永远不会有原始值,只有副本,修改副本当然不会修改原始值。
您可以通过使用指针来模拟通过引用传递,并且在通过引用传递指针的情况下,您当然必须将指针传递给指针(通过使用地址运算符 &
).
void fun(FILE **f)
{
fclose(*f);
*f = fopen("newfile", "r");
}
...
fun(&old);