在下面的代码中,“stk”被视为指针。但是,经过几个小时的仔细观察后,我始终看不出它是指针。有人能解释一下我错过了什么吗?
我的理解是T是一个结构体,因此stk是一个包含结构体的局部自动变量。它不是指针,但是后来它被当作指针来处理,让我陷入了一种困惑的状态。 更多背景信息 这段代码来自Hanson写的书《C接口与实现》。他创建了一个抽象数据类型的库,暴露了接口并隐藏了实现。栈是他首先介绍的一个。我是一名长期从事编程工作的人,现在才开始深入研究C语言,显然有些语法我还没有理解。谢谢。
如果相关的话,在这里是NEW的定义和new调用的东西:
struct T {
int count;
struct elem {
void *x;
struct elem *link;
} *head;
};
T Stack_new(void) {
T stk;
NEW(stk);
stk->count = 0;
stk->head = NULL;
return stk;
}
我的理解是T是一个结构体,因此stk是一个包含结构体的局部自动变量。它不是指针,但是后来它被当作指针来处理,让我陷入了一种困惑的状态。 更多背景信息 这段代码来自Hanson写的书《C接口与实现》。他创建了一个抽象数据类型的库,暴露了接口并隐藏了实现。栈是他首先介绍的一个。我是一名长期从事编程工作的人,现在才开始深入研究C语言,显然有些语法我还没有理解。谢谢。
如果相关的话,在这里是NEW的定义和new调用的东西:
#define NEW(p) ((p) = ALLOC((long)sizeof *(p)))
#define ALLOC(nbytes) \
Mem_alloc((nbytes), __FILE__, __LINE__)
extern void *Mem_alloc (long nbytes,
const char *file, int line);
T
这个结构体本身不是指针,但你是否查找过将T
定义为指针的typedef
呢? - Some programmer dude