【发布时间】:2020-08-16 05:09:17
【问题描述】:
我目前正在研究如何在 C 中使用指针,如果您不介意,我有几个问题。
我正在尝试处理来自文件的信息,因此 - 为了保持模块化 - 我想将“我的文件”“发送”到几个辅助方法中。
我的问题是:
我知道,如果我在方法中创建这些文件指针 - 它们会保存在堆栈中。将指针从堆栈内存发送到其他方法是否有问题(从某种意义上说,它可能会导致不需要的行为)?
我知道如果我将文件的指针发送给其他方法,它实际上会创建它们的副本,这意味着在方法内部更改它们根本不会做任何事情。
这就是为什么我询问“指向指针的指针”的原因,我读过(但不太明白)我可以将辅助方法指针发送到文件指针 - 这样,我就可以处理我的实际文件,而不是一些本地副本。
假设mainFunction 是我用于处理文件的主要方法(它不在“真正的”主要方法中)
void helperFunction1(FILE* file1, FILE* file2)
{
fclose(outputFile);
fclose(inputFile);
}
void helperFunction2(FILE* file1, FILE* file2)
{
**write some stuff into both files**
}
void mainFunction()
{
FILE* inputFile = fopen(filePath, "r");
FILE* outputFile = fopen(OUTPUT_FILE_NAME, "w");
helperFunction2(inputFile, outputFile);
helperFunction1(inputFile, outputFile);
}
“真实的”inputFile 和 outputFile 会因调用 helpFunction1 而关闭吗?
“真实的”inputFile 和 outputFile 会从调用helpFunction2 得到修改(将一些内容写入其中)吗?
我很想对我的问题获得一些见解/答案(我希望它们是有效的,不要太咄咄逼人),我也很想简要解释一下如何使用“指向指针的指针”来修改数据,而不是修改它的一些副本。
【问题讨论】:
-
你的问题 1 是你不应该担心的。担心理解按指针传递和按值传递的区别。
-
在您的
helperFunction1中,您需要使用 arguments 的名称(file1和file2)并且 not 他们的名称调用函数。 -
局部变量的生命周期仅在包含它的函数结束时结束。所以问题 1 很简单。
-
if i'll send the pointers of the files to other methods, it will actually create a copy of them, which means that changing them inside the method would not do anything at all.-- 你的目标不是改变指针;就是改变指针指向的数据。 -
您的代码中没有任何内容需要使用指向指针的指针。