gpt4 book ai didi

c - 为什么客户端不能在这种情况下取​​消引用指针?

转载 作者:行者123 更新时间:2023-12-01 23:50:11 24 4
gpt4 key购买 nike

我知道客户端可以在这种情况下操作指向结构的指针,但不能取消引用它。我想知道为什么不能取消引用它?

堆栈.h

#ifndef STACK_INCLUDED
#define STACK_INCLUDED

typedef struct Stack_T *Stack_T;

extern Stack_T stack_new(void);
extern int stack_empty( Stack_T p_stk );
extern void stack_push( Stack_T p_stk, void *p_data );
extern void *stack_pop( Stack_T p_stk );
extern void stack_free( Stack_T *p_stk );

#endif

堆栈.c

#include "stack.h"

struct Stack_T {
int node_count;
struct node {
void *p_data;
struct elem *p_link;
} *p_head;
};

主.c

#include "stack.h"

int main(void)
{
Stack_T stk;
...
return EXIT_SUCCESS;
}

更确切地说,为什么不能在 main 中取消引用该对象

最佳答案

我假设“客户端”是指“包含 stack.h 的源文件”。

原因是struct Stack_T实际上并没有在stack.h文件中定义。它已声明,typedef 确保编译器理解将在某处定义一个 struct Stack_T,但尚未定义。

stack.c 是唯一需要知道 inside struct Stack_T 是什么的模块,所以结构的定义是在该文件中。

此代码的客户端不需要知道 struct Stack_T 中的内容,因此他们看不到定义。

关于c - 为什么客户端不能在这种情况下取​​消引用指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26985506/

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