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)
这是我使用指针不正确的一个例子还是我做错了什么?
您需要传递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)