gpt4 book ai didi

c++ - 理解 C++ 中文件 I/O 的指针

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:32 24 4
gpt4 key购买 nike

我正在尝试更好地掌握指针。我的类作业是为原型(prototype) void OpenFile(const char *fileName, ifstream &inFile) 创建函数。

 void OpenFile(const char *fileName, ifstream &inFile) 
{
inFile.open(FILENAME, ios_base::in);
if (!inFile.is_open()) {
cerr << "Could not open file " << fileName << "\n";
exit(EXIT_FAILURE);
}
else {
cout << "File Open successful";
}
}

//FILENAME is defined as: const char * const FILENAME = "file.txt";

// function is called in main with: OpenFile(FILENAME, inFile);

我想我不明白的是两个参数的 const char * 和 &。我猜第一个参数是一个 const char *,因为这就是赋值定义 FILENAME 的方式。但是在这种情况下我必须使用指针吗?我能做吗

    const char FILENAME = "file.txt";

在我的 OpenFile 中,第一个参数只接受一个 const char。再一次,为什么我的函数的第二个参数需要一个引用?绝对混淆何时使用指针以及何时使用引用。谢谢!

最佳答案

首先,让我说一下,如果您传入一个参数 fileName 但随后在其中使用 FILENAME 并且 fileName 仅用于错误输出,那么您的函数看起来有点奇怪。我想这不太正确。

其次,const char* 问题。 char 本身只是一个 char (字符),因此只是一个字符。 const char FILENAME = "file.txt"因此将不起作用。相反,您需要一个字符数组(const char FILENAME[] = ...),或者像在 C 中所做的那样,使用指向文本内存位置的指针,即 char*。

由于您似乎使用的是 STL,因此放弃 char* 并改为转换为 std::string 可能是个好主意。

第三,指针与引用通常是个人喜好问题。最后他们都做同样的事情,在编译器中他们实际上是一样的。使用上的一个区别是您不能传递空 (null) 引用,但可以传递空指针。因此,如果您确实需要传递一个对象,通常建议使用引用,并使用一个指向任何可选内容的指针(在这种情况下,您必须处理 ptr == NULL)。此外,C 字符串是 char* 和其他手动分配的内存通常通过指针发送。

关于c++ - 理解 C++ 中文件 I/O 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2126467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com