C++/h.文件中的参数
C++/ arguments in h. file
我读了一本书,其中给出了.h文件的例子,它等于java中的队列接口:
void InitQueue(Queue* pQueue, int iSize);
bool Insert(Queue* pQueue, const Item* pItem);
bool Extract(Queue* pQueue, Item** pItem);
bool GetFirst(const Queue* pQueue, Item** pItem);
bool IsFull(const Queue* pQueue);
bool IsEmpty(const Queue* pQueue);
我不明白两件事:
- 为什么在
Extract, GetFirst
第二个参数是类型Item**
而不是Item*
?当我们做这样的事情时,是什么意思? - 为什么在某些函数(
IsFull, IsEmpty
,.)中我们得到参数const Queue*
而不是简单的Queue*
?
IsFull() 和 IsEmpty() 采用 const 参数,因为这意味着它们不会更改 Queue 对象;它是常量,不会被修改。
Extract 和 GetFirst 使用 **,因为:
int a; // Declares an int
a = 2; // Sets a to 2
int *b = &a; // Declares a pointer pointing to that int
*b = 4; // Sets a to 4
int **c = &b; // Declares a pointer pointing to that pointer to that int
**c = 6; // Sets a to 6
如果我将 c 传递给一个函数:
int global_var;
int main() {
modify_ptr(c);
}
void modify_ptr(int **ptr)
{
*ptr = &global_var;
}
我刚刚传入的指针本身被修改了;**c 现在指向 global_var 而不是 a。
将这些指针传递到 getfirst 和 extract 的原因是因为这些是"getter"函数 - 您希望它们返回指向数据的指针。因此,它们需要能够返回指针,并且它们采用的方法是将指针传递给指针,如上例所示,以便它们可以修改您传递给它们的内容以指向正确的元素。
为什么在Extract
中,GetFirst
第二个参数是类型 Item**
而不是 Item*
?当我们写这样的东西时是什么意思?
以便可以在函数内部更改指针。
最有可能的是,这意味着Item
指针将由调用方传递,但将在函数内部分配。不能仅通过按值传递指针来执行此操作,因为这会将内存分配给指针的副本,而不是要传递的原始指针。
很难说为什么程序员使用调用者传递指针和函数分配指针的语义。理想情况下,人们会期望一个源-接收器机制。
为什么在某些函数(IsFull
,IsEmpty
,.)中我们得到参数const Queue*
而不是简单的Queue*
?
为了常量的正确性!
它向函数的用户指示指向的数据不会在函数内部更改。
为什么在提取中,GetFirst 第二个参数的类型是 Item** 而不是 Item*?当我们做这样的事情时,是什么意思?
这些是输出。队列显然包含一堆指向项目的指针。由于它是一个指针,我会做Extract
,GetFirst
只接受一个参数并返回一个指针。空指针表示失败。开发人员不是这样做的。相反,他们使用了一种旧的C式范式。为什么?谁知道呢。这不是编写这些内容的最佳方式。
为什么在某些函数(IsFull,IsEmpty等)中,我们得到参数const Queue*而不是简单的Queue*?
将参数标记为const
告诉代码的用户,该函数不会对参数的内容执行任何操作。将此类不受干扰的引用和指针参数标记为const
是一种很好的编程做法。
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 是否可以在命令行中将输入参数传递给可执行文件
- 如何使用输入参数作为文件的传递?
- 隐蔽的 gcc 参数到 CMake 文件
- 生成文件文件名参数
- 在实现文件中使用模板参数声明方法
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 如何在 c++ 窗口中将参数和返回的退出值传递到批处理文件/从批处理文件获取返回的退出值
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 如何使输入文本文件成为构造函数参数?c++
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 读取用户必须提供一些参数的文件
- 如何使用 QProcess 设置参数以运行类文件?
- 可变参数模板在目标文件中有重复的符号?
- c++ 文件的参数
- accept(..) 似乎正在修改我给它的文件描述符参数
- C++ 找不到命令行参数(文件)