我对此感到有点困惑,因为我正在查看调度程序的一些代码,他们定义了一个struct PCB(进程控制块),它基本上包含有关正在运行的进程和struct队列的一堆信息。队列基本上只管理进程执行的顺序,但也会在队列之间移动进程(例如,将PCB从queue1移动到queue2)。队列结构基本上定义为
struct Queue{
pcbptr front;
pcbptr back;
}
其中pcbptr定义为
typedef pcb * pcbptr
我有点困惑为什么在这种情况下你会使用pcbptr而不是简单地定义队列来使用pcb?
感谢您的帮助
答案 0 :(得分:0)
原因很简单,因为时间。指向不同结构的指针比通过值获得结构副本更快。 此外,使用队列的人可能希望修改PCB,如果按值传递PCB,他们将无法做到这一点。
另外,如果你问他们为什么不简单地使用PCB *而不是将PCB *打成pcbptr,那就完全取决于命名惯例。它们在功能上完全相同。
答案 1 :(得分:0)
只需考虑一个队列及其在不同长度的含义。
如果它是0,你需要以某种方式告诉我们(通常只需将前面和后面的指针设置为NULL)。
如果是1,前后两者都需要指向同一个东西。
如果它是2,它们指向不同的东西,但有一个链接从一个到另一个。
如果是3,则前点为第一个,第一个指向中间点,中间点指向最后一个,后点指向最后一个。
所以无论你做什么,使用像这样的可变大小你需要使用指针。对于中间的..为什么要打扰前面和后面的东西,除了一个指针? (特别是因为更改指针比尝试移动结构更快,代码大约复杂100倍)