使用指针的意外结果

lgr*_*enl 0 c pointers pass-by-reference

首先,如果你以前见过这个,请道歉.我努力尝试在这里和其他地方找到答案.

我是C的新手,仍然专注于指针和有效使用它们.

代码(为简洁起见编辑):

void getInFile(char fileName[], FILE *inFile) {
    inFile = fopen(fileName, "r");
    if(inFile == NULL) {
        printf("Error1");
    }
}

void function(FILE *inFile) {
    if(inFile == NULL) {
        printf("Error2");
    }
}

int main(int argc, char *argv[]) {
    FILE *inFile = 0;
    getInFile(argv[2], inFile);
    function(inFile);
}
Run Code Online (Sandbox Code Playgroud)

如上所述,运行程序会产生错误2.如果我将getInFile从void更改为FILE*返回类型并且在main方法中有以下内容我得到error1:

inFile = getInFile(argv[2], inFile);
Run Code Online (Sandbox Code Playgroud)

这是我使用指针不正确的一个例子还是我做错了什么?

cha*_*e55 5

您需要传递FILE指针的地址,以便函数'getInFile'可以修改它.像这样:

void getInFile(char fileName[], FILE **inFile) {
    *inFile = fopen(fileName, "r");
    if(*inFile == NULL) {
        printf("Error1");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在主要调用它:

getInFile(argv[2], &inFile);
Run Code Online (Sandbox Code Playgroud)