gpt4 book ai didi

c - 代码中的两个警告意味着使用链表实现堆栈

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:35 25 4
gpt4 key购买 nike

我有三个文件:stack2.h、stack2.c 和 main.c。

stack2.h 包含这个:

/* Define linked list structure */
typedef struct node {
int val;
struct Node *next;
} Node, *pNode;

/* Define stack structure */
typedef struct StackType {
pNode top;
} Stack, *pStack;

/* Declare functions */
pStack InitStack( );

int IsEmpty( pStack pS );
int Pop( pStack pS );

void Push( pStack pS, int val );
void KillStack( pStack pS );

stack2.c 包含

pStack InitStack( ) {

/* Declare variables */
pStack pS = (pStack)malloc( sizeof(Stack) );

/* Set first node to NULL */
pS -> top = NULL;

/* Return pointer to stack */
return pS;

}

int IsEmpty( pStack pS ) {

return ( pS->top == NULL );

}

int Pop( pStack pS ) {

/* Declare variables */
int ret = 0;
pNode temp = NULL;

/* Check if stack is empty */
if( IsEmpty( pS ) ) {
printf( "[ERROR] Pop operation on an empty stack.\n" );
exit( 1 );
}

/* Find return value (last in) */
ret = pS->top->val;
temp = pS->top;

/* Delete and kill node */
pS->top = pS->top->next;
free( temp );

/* Return */
return ret;

}

void Push( pStack pS, int val ) {

/* Allocate memory for new node */
pNode nnew = (pNode)malloc( sizeof(Node) );

/* Initiate node */
nnew->next = pS->top;
nnew->val = val;

/* Set structure's top to new node */
pS -> top = nnew;

}

我不会用 main.c 包含的内容给您带来负担。本质上,它包括正确的库和文件,并简单地压入和弹出一些值。我收到这些警告:

assignment from incompatible pointer types

在这两行上:

    nnew->next = pS->top;
pS->top = pS->top->next;

我有点困惑。 nnew 是指向节点的指针,因此 nnew->next 也是指向节点的指针。 pS 是指向堆栈的指针,因此 pS->top 也是指向节点的指针。我看不出它们有多么不兼容!

这里发生了什么?谢谢!

最佳答案

typedef struct node {
int val;
struct Node *next;
} Node, *pNode;

您声明了 struct node 但在其中使用了 struct Node *; C 是区分大小写的,因此指针不是相同的类型。 C,也许不幸的是,只要你不取消引用它们,就会很高兴地让你操纵指向未知 struct 类型的指针(这是一个用于“不透明指针”的惯用语),所以你得到的唯一警告这是指针类型不匹配。

关于c - 代码中的两个警告意味着使用链表实现堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10325081/

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