在下面的代码中,我创建了一个 char 指针和一个 FILE 指针,并尝试将两者都传递给“当然是按值”的函数。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void move(char *s){
++s;
}
void moveF(FILE *f){
getc(f);
}
int main(){
char *s = malloc(64);
strcpy(s,"123456");
puts(s);
move(s);
puts(s);
//~~~~~~~~~~
FILE *f = fopen("file1","r");
printf("%d\n",(int)ftell(f));
moveF(f);
printf("%d\n",(int)ftell(f));
}
我知道传值意味着参数是调用函数中原始变量的副本,这就是为什么你可以注意到传递char指针后,它在main函数中的值根本没有改变,但奇怪的是传递一个 FILE 指针并更改参数的值会导致更改主函数内的变量值。
有人可以解释这种行为。谢谢。