Вы не должны манипулировать аргументами, если это не определенная цель кода. Лучше просто вернуть вещи:
FILE* init()
{
return fopen("in.txt", "r");
}
Тогда вы называете это так:
FILE* fi = init();
Обратите внимание, что, поскольку вы используете C ++, вам следует избегать использования анахронизмов C, таких как FILE
, и вместо этого использовать файловые потоки C ++.
Если вам нужно обработать несколько возвращаемых значений:
std::tuple<FILE*, FILE*> init() {
return std::make_tuple(
fopen("in.txt", "r"),
fopen("out.txt", "w")
);
}
Это всего лишь шаг к созданию правильного кода C ++ путем инкапсуляции всего этого в правильном определении class
, а затем вы можете напрямую манипулировать свойствами:
class FileWrapper {
public:
FileWrapper();
~FileWrapper();
void init();
protected:
FILE *fi;
FILE *fo;
}
void FileWrapper::init() {
fi = fopen("in.txt", "r");
fo = fopen("out.txt", "w");
}
В этом случае вам даже не нужно возвращать значения. Вы также сможете автоматически очистить эти файловые дескрипторы, когда этот класс-оболочка будет освобожден, если вы напишите правильный деструктор.