首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用链表实现堆栈的代码中有两个警告

使用链表实现堆栈的代码中有两个警告
EN

Stack Overflow用户
提问于 2012-04-26 07:10:21
回答 1查看 122关注 0票数 0

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

stack2.h包含以下内容:

代码语言:javascript
复制
/* 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包含

代码语言:javascript
复制
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包含的东西给您增加负担。本质上,它包含正确的库和文件,并简单地推送和弹出一些值。我得到以下警告:

代码语言:javascript
复制
assignment from incompatible pointer types

在这两行代码中:

代码语言:javascript
复制
    nnew->next = pS->top;
    pS->top = pS->top->next;

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

这是怎么回事?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-04-26 07:24:41

代码语言:javascript
复制
typedef struct node {
    int val;
    struct Node *next;
} Node, *pNode;

您声明了struct node,但在其中使用了struct Node *;C区分大小写,因此指针的类型不同。也许不幸的是,只要不取消引用未知struct类型的指针(这是一种用于“不透明指针”的习惯用法),C就会很乐意地让您操纵这些指针,因此您得到的唯一警告就是指针类型不匹配。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10325081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档