int stack_data[N]; // Global stack
int stack_size = 0; // without a struct
struct stack {
int data[N];
int size;
};
struct stack stack = {0}; // Global stack using struct
void foo(void) {
int foo_stack_data[N]; // Local stack
int foo_stack_index = 0; // without a struct
...
...
}
void bar(void) {
struct stack bar_stack = {0}; // Local stack using struct
...
...
}
1条答案
按热度按时间6ojccjat1#
一个完整的答案将需要一个很长,很长,很长的答案。它可能会变成基于观点的例子(这在SO上不受欢迎/禁止)。但下面我写了一些你新要考虑的事情。
你把两个不相关的东西混在一起了。使用结构(
struct
)并不妨碍您将堆栈设置为全局变量。不使用结构并不妨碍您使用本地堆栈。换句话说,堆栈是全局的还是局部的,与
struct
的使用没有任何关系。使用
struct
有几个原因。在struct
中收集密切相关的变量,如“堆栈数据”和“堆栈大小”,在许多情况下会使代码更易于阅读和维护。举个例子,假设你的程序需要100个堆栈。如果没有
struct
,你需要2 * 100 = 200行代码。对于struct stack
,您只需要100行(加上4行用于定义)。随着与数据结构相关的变量数量的增加,情况会变得更糟。如果你需要一个动态分配的堆栈,一个
malloc
的调用就可以使用struct
,而你需要两个malloc
的调用而不需要struct
。全局变量嗯,在某些情况下,(一些)全局变量是有意义的。但是大量使用全局变量(几乎)总是会导致混乱。一个好的规则是避免全局变量,除非你有一个非常强的参数。
你看这个
会有用的**但是...**如果我需要两叠或八叠呢?那么我应该写
push
函数的8个版本吗?听起来一点都不好玩...所以我做了:
传递与堆栈相关的变量允许我有多个堆栈。
但我必须同时传递数据和大小。两个论点。如果我需要5个变量来描述我的数据结构呢?那么我必须传递5个参数。除了所有的输入,它也会/可能会损害性能。
通过使用
struct
方法,我可以使用单个参数,即。一个指向struct
变量的指针: