C语言如何将指针从函数返回到指针

西哈特0

以下是我编写的使用链表数据结构实现堆栈的代码。我了解数据结构的概念,但对使用指针还很陌生,因此在实现时遇到了麻烦。

    #include<stdio.h>
    #include<stdlib.h>

    typedef struct NODE{
        int data;
        struct NODE *next;
    }NODE;

    NODE *top=NULL;
    NODE *newNode=NULL;

    NODE createNode();
    void push(NODE *newNode, int element);
    int pop();
    void display();

    int main()
    {
        int element,choice,p_item;

        do
        {
            printf("\nWhat operation would you like to perform on stack?\n1.Push\n2.Pop\n3.Display\n4.Exit\n");
            printf("\nEnter your choice: ");
            scanf("%d",&choice);
            switch(choice)
            {
                case 1: printf("\nScan an element to push on stack: ");
                        scanf("%d",&element);
                        push(newNode, element);
                        break;

                case 2: p_item=pop();
                        printf("\nThe popped item is %d.\n",p_item);
                        break;

                case 3: display();
                        break;

                case 4: exit(0);
                        break;

                default: printf("\nWrong Choice!!Enter Again!\n");
            }
        }while(choice!=4);

        return 0;
    }

int pop()
{   
    if(top==NULL)
    {
        printf("\nStack UnderFlow!\n");
        return 0;
    }
    NODE *temp=top;
    int p_item;

        p_item=top->data;
        top=top->next;
        free(temp);

    return p_item; 
}

void display()
{
   if(top == NULL)
        printf("\nStack UnderFlow!\n");
   else
   {
        NODE* temp = top;
        while(temp->next != NULL)
        {
            printf("%d--->",temp->data);
            temp=temp->next;
        }  
        printf("%d--->NULL",temp->data);
   }
}

大多数情况下,上面编写的代码是正确的,唯一遇到麻烦的地方是以下部分:

    NODE createNode()
    {   NODE *node;
        node=(NODE*)malloc(sizeof(NODE));
        return node;  //line 54
    }

在上述功能中,我相信我正在做的是;声明一个节点,为其分配内存并返回指针。但显然代码不正确,我的知识仅限于理解,我做错了什么。

    void push(NODE *newNode, int element)
    {
        newNode=createNode();  //line 59
        // newNode=(NODE*)malloc(sizeof(NODE));
        newNode->data=element;
        if(top==NULL)
        {
            newNode->next=NULL;
            top=newNode;
            return;
        }
        newNode->next=top;
        top=newNode;
    }

在上面的代码中,如果我省略

    newNode=createNode();

并取消注释以下行,

    newNode=(NODE*)malloc(sizeof(NODE));

然后,我可以毫无困难地完美地执行整个程序,但是为了实现其他数据结构概念,我想了解哪里出错了。

以下是错误:

stack_using_linked_list.c: In function ‘createNode’:
stack_using_linked_list.c:54:12: error: incompatible types when returning type ‘NODE * {aka struct NODE *}’ but ‘NODE {aka struct NODE}’ was expected
     return node;
            ^
stack_using_linked_list.c: In function ‘push’:
stack_using_linked_list.c:59:12: error: incompatible types when assigning to type ‘NODE * {aka struct NODE *}’ from type ‘NODE {aka struct NODE}’
     newNode=createNode();

谢谢你,花时间阅读。

乔纳森·伍德

在上述功能中,我相信我正在做的是;声明一个节点,为其分配内存并返回指针。但显然代码不正确,我的知识仅限于理解,我做错了什么。

我看到的错误是您将函数声明为返回 a NODE,但您的代码返回 a NODE*(指向 a 的指针NODE)。

您可以更改函数的声明以显示正确的返回类型。

NODE* createNode()
{
    NODE *node;
    node = (NODE*)malloc(sizeof(NODE));
    return node;
}

或者你可以把它缩短到这个。

NODE* createNode()
{
    return (NODE*)malloc(sizeof(NODE));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将参数绑定到C函数指针?

来自分类Dev

如何将(非静态成员函数的)C ++函数指针传递给预定义的C函数?

来自分类Dev

将数组地址从函数返回到指针(C ++)

来自分类Dev

如何使用C#接口将C ++智能指针返回到PowerPoint接口

来自分类Dev

C-如何将指针值返回给main?

来自分类Dev

如何在不使用C语言中使用typedef的情况下声明将指针返回到返回函数指针的函数的函数?

来自分类Dev

如何将函数属性设置为函数指针?

来自分类Dev

C:如何将多个值从函数返回到main

来自分类Dev

将指针返回数组的函数

来自分类Dev

如何将函数指针作为const返回?

来自分类Dev

如何将C ++指针分配给C#函数

来自分类Dev

如何使用inline-c来包装将指针返回到自定义结构类型的函数?

来自分类Dev

如何将指针列表插入指针指针列表?

来自分类Dev

在C语言中,函数是否可能返回指向自身的指针?

来自分类Dev

C语言中的R扩展:如何将结构链接到SEXP指针?

来自分类Dev

C指针,了解如何将数组传递给函数

来自分类Dev

如何将返回指针从C ++ dll函数返回到C#

来自分类Dev

将数组地址从函数返回到指针(C ++)

来自分类Dev

从C#调用C dll中的函数,该函数将某种类型的指针返回到函数指针

来自分类Dev

如何将指针传递给函数并在函数C ++中动态分配内存

来自分类Dev

将指针从库返回到应用

来自分类Dev

如何将参数传递给C中的函数指针?

来自分类Dev

如何将函数属性设置为函数指针?

来自分类Dev

如何编写将指针返回堆栈的函数

来自分类Dev

如何将函数指针作为const返回?

来自分类Dev

将int array []或指向int array []的指针返回到C中的调用例程的函数

来自分类Dev

如何将函数分配给函数指针

来自分类Dev

C语言如何返回指针

来自分类Dev

使用指针将字符和浮点值从 scanf 返回到主函数 C

Related 相关文章

  1. 1

    如何将参数绑定到C函数指针?

  2. 2

    如何将(非静态成员函数的)C ++函数指针传递给预定义的C函数?

  3. 3

    将数组地址从函数返回到指针(C ++)

  4. 4

    如何使用C#接口将C ++智能指针返回到PowerPoint接口

  5. 5

    C-如何将指针值返回给main?

  6. 6

    如何在不使用C语言中使用typedef的情况下声明将指针返回到返回函数指针的函数的函数?

  7. 7

    如何将函数属性设置为函数指针?

  8. 8

    C:如何将多个值从函数返回到main

  9. 9

    将指针返回数组的函数

  10. 10

    如何将函数指针作为const返回?

  11. 11

    如何将C ++指针分配给C#函数

  12. 12

    如何使用inline-c来包装将指针返回到自定义结构类型的函数?

  13. 13

    如何将指针列表插入指针指针列表?

  14. 14

    在C语言中,函数是否可能返回指向自身的指针?

  15. 15

    C语言中的R扩展:如何将结构链接到SEXP指针?

  16. 16

    C指针,了解如何将数组传递给函数

  17. 17

    如何将返回指针从C ++ dll函数返回到C#

  18. 18

    将数组地址从函数返回到指针(C ++)

  19. 19

    从C#调用C dll中的函数,该函数将某种类型的指针返回到函数指针

  20. 20

    如何将指针传递给函数并在函数C ++中动态分配内存

  21. 21

    将指针从库返回到应用

  22. 22

    如何将参数传递给C中的函数指针?

  23. 23

    如何将函数属性设置为函数指针?

  24. 24

    如何编写将指针返回堆栈的函数

  25. 25

    如何将函数指针作为const返回?

  26. 26

    将int array []或指向int array []的指针返回到C中的调用例程的函数

  27. 27

    如何将函数分配给函数指针

  28. 28

    C语言如何返回指针

  29. 29

    使用指针将字符和浮点值从 scanf 返回到主函数 C

热门标签

归档