c 语言建立结构体以及指针


#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int a;
}list;
list* creat(void)
{
    list *new;
    new=(list*)malloc(sizeof(struct node));
    new->a=5;
    return new;
}
int main()
{
    list *List=creat();
    printf("%d",List->a);
}

在create函数中建立一个新的结构体指针并为结构体成员赋值,返回给List,为什么会报错

把new改成其他的标识符就好了

LIST不是内置的吗,你不能重名

你的代码中存在一个小错误,sizeof(struct node) 应该改为 sizeof(list),因为 liststruct node 的别名,而 sizeof 运算符需要的是类型的大小,而不是类型名。

以下是修改后的代码:

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

typedef struct node
{
    int a;
} list;

list* creat(void)
{
    list *new;
    new = (list*)malloc(sizeof(list));
    new->a = 5;
    return new;
}

int main()
{
    list *List = creat();
    printf("%d", List->a);
    free(List); // 记得释放内存
    return 0;
}

注意,在使用完动态分配的内存后,需要使用 free 函数释放内存,避免内存泄漏。

我这里不报错,运行的好好的呀
到底报什么错,放出来看看,是不是你用vs了

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7748743
  • 除此之外, 这篇博客: c语言实现任何数据类型的list(双向循环链表)中的  测试结果 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • a00122f8422c4f6dbcfce2c9cc8c6a00.png

  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    在一个create函数中正确建立一个新的结构体指针,为它的成员赋值,并返回给List的步骤如下:

    1. 定义结构体类型,并在全局定义宏#define LEN。如下:
    #define LEN 100
    typedef struct {
        int id;
        char name[LEN+1];
        char gender;
    } student;
    
    1. 在新建节点的函数中动态申请一个新节点:
    student* create_student(int id, char* name, char gender)
    {
        student* st = (student*)malloc(sizeof(student));
        st -> id = id;
        strncpy(st -> name, name, LEN+1);
        st -> gender = gender;
        return st;
    }
    
    1. 在链表中加入新节点,示例代码如下:
    void add_student(ListNode** pphead, int id, char* name, char gender)
    {
        student* st = create_student(id, name, gender);
        ListNode* p = (*pphead) -> prev;
        p -> next -> prev = st;
        st -> next = p -> next;
        p -> next = st;
        st -> prev = p;
    }
    
    1. 最后应该记得在程序结尾释放内存空间,避免内存泄漏:
    ListNode* p = (*pphead) -> next;
        while(p != *pphead)
        {
            ListNode* q = p -> next;
            free(p -> data);
            free(p);
            p = q;
        }
        free(*pphead);
        *pphead = NULL;
    

    通过以上步骤,应该就能够正确创建结构体指针并为其成员赋值,并返回给List了。