0

在下面的代码中,我创建了一个 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 指针并更改参数的值会导致更改主函数内的变量值。

有人可以解释这种行为。谢谢。

4

1 回答 1

0

传递指向对象的指针与通过引用传递对象相同。因此,您FILE通过引用传递结构。任何一个函数中的指针都指向内存中的同一个对象,因此任何一个都可以修改该对象并查看其他对象的更改。

于 2015-10-10T01:20:10.667 回答