c指针中不兼容的指针类型


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

struct node {
    int data;
    struct node *next;
};
int insert (struct node *head, int data);
int print (struct node *head);
int main()
{
    struct node *head;
    head = NULL;
    // printf("%dn",head);
    insert(&head,5);
    insert(&head,4);
    insert(&head,6);
    print(&head);
    print(&head);
    print(&head);
}
int insert(struct node *head,int data) {
    if(head == NULL) {
        head = malloc(sizeof(struct node));
        head->next = NULL;
        head->data = data;
        // printf("%dn",data);
    }
    else {
        struct node *tmp = head;
        if(tmp->next!=NULL) {
            tmp = tmp->next;
        }
        tmp->next  = malloc(sizeof(struct node));
        tmp->next->next = NULL;
        tmp->next->data = data;
        // printf("%dn",data);
    }
}
int print (struct node *head) {
    printf("hello entered heren");
    struct node *tmp = head;
    if (head == NULL) {
        printf("entered nulln");
        return;
    }
    while (tmp != NULL) {
        if (tmp->next == NULL) {
            printf("%0d", tmp->data);
        } else {
            printf("%0d -> ", tmp->data);
        }
        tmp = tmp->next;
    }
    printf("n");
}
当I 编译 it 时,我得到以下警告
In function main:
insert.c:16: warning: passing argument 1 of insert from incompatible pointer type
insert.c:17: warning: passing argument 1 of insert from incompatible pointer type
insert.c:18: warning: passing argument 1 of insert from incompatible pointer type
insert.c:19: warning: passing argument 1 of print from incompatible pointer type
insert.c:20: warning: passing argument 1 of print from incompatible pointer type
insert.c:21: warning: passing argument 1 of print from incompatible pointer type

当我运行 it时,我将得到以下输出

hello entered here
0 -> 5 -> 6
hello entered here
0 -> 5 -> 6
hello entered here
0 -> 5 -> 6

请帮我删除这些警告。
你能帮我添加一个函数来删除C中的节点吗?
我犯了什么错误?
我应该把**head传递给函数吗?

当前函数print()和insert()期望传递struct node*,而您传递struct node **。如果您想传递一个副本,那么在代码中的函数调用中删除&

如果你想修改指针head,传递一个指针到另一个指针,并相应地修改形参:

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

    struct node {
      int data;
      struct node *next;
    };
    int insert (struct node **head, int data);
    int  print  (struct node **head);
    int main()
    {
     struct node *head;
     head = NULL;
    // printf("%dn",head);
     insert(&head,5);
     insert(&head,4);
     insert(&head,6);
     print(&head);
     print(&head);
     print(&head);
    } 
    int  insert(struct node **head,int data){
      if(*head == NULL){
        *head = malloc(sizeof(struct node));
        (*head)->next = NULL;
        (*head)->data = data;
    //    printf("%dn",data);
      }
    else {
      struct node *tmp = *head;
      if(tmp->next!=NULL){
        tmp = tmp->next;
      }
    tmp->next  = malloc(sizeof(struct node));
      tmp->next->next = NULL;
      tmp->next->data = data;
    //  printf("%dn",data);
    }
    }

    int print (struct node **head) {
      printf("hello entered heren");
        struct node *tmp = *head;
        if (*head == NULL) {
          printf("entered nulln");
            return;
        }
        while (tmp != NULL) {
            if (tmp->next == NULL) {
                printf("%0d", tmp->data);
            } else {
                printf("%0d -> ", tmp->data);
            }
            tmp = tmp->next;
        }
        printf("n");
    }

你的insert()闻起来——太复杂了。这实际上是一种面向对象。

这是我的方法,直接输入:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// class node_t
typedef struct __node_s *node_t; // Mind the pointer here.
struct __node_s {
    int data;
    node_t next;
};
node_t node_init(void); // Constructor.
void node_append(node_t, int);
void node_drop_last(node_t);
void node_print(node_t);
void node_fini(node_t); // Destructor.
// end class node_t
int main(void)
{
    node_t head = node_init();
    node_append(head, 5);
    node_append(head, 4);
    node_append(head, 6);
    node_print(head);
    node_drop_last(head);
    node_print(head);
    node_fini(head);
    head = NULL;
    return 0;
}
node_t node_init(void)
{
     node_t node = malloc(sizeof(struct __node_s));
     assert(node);
     memset(node, 0, sizeof(struct __node_s));
     return node;
}
void node_insert(node_t head, int data)
{
    node_t last = head, new = node_init();
    for (; last->next; last = last->next);
    new->data = data;
    last->next = new;
}
void node_drop_last(node_t head)
{
    node_t last = head;
    if (!head->next)
        return;
    for (; last->next->next; last - last->next);
    node_fini(last->next);
    last->next = NULL;
}
void node_print(node_t head)
{
    for (node_t this = head->next; this; this = this->next)
    {
        printf("%d", this->data);
        if (this->next)
            putchar(' '); // A lot faster!
    }
    putchar('n');
}
void node_fini(node_t head)
{
    if (head->next)
    {
        node_fini(head->next);
        head->next = NULL;
    }
    free(head);
}

相关内容

  • 没有找到相关文章

最新更新