2201_75843485 2024-02-29 15:45 采纳率: 50%
浏览 2
已结题

C语言 建立静态链表 基础题

建立一个简单的静态链表
这样写不对吗

img


不能直接给name数组赋值?

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-02-29 15:45
    关注

    2201_75843485 下午好🌅🌅🌅
    本答案参考通义千问

    你的代码中存在一些问题,让我帮你逐一解决:

    1. 结构体定义的语法有误。struct student应该放在#include之前,或者在函数定义之前。

    2. 静态链表中的成员变量numname应该在结构体定义时声明,并且需要初始化。

    3. struct student *next 应该是成员变量,而不是成员本身。

    4. 初始化链表时,你试图将数组赋值给指针,这是不允许的。你需要为链表节点分配内存,并正确设置每个节点的值。

    以下是修正后的代码:

    #include<stdio.h>
    
    // 将结构体定义放在这里
    struct student {
        int num;
        char name[20];
        struct student* next; // 将next作为成员变量
    };
    
    int main() {
        // 定义链表节点和头指针
        struct student a, b, c;
        struct student *head = NULL, *p;
    
        // 分配内存并初始化链表
        a.num = 1;
        strcpy(a.name, "zhang"); // 使用strcpy复制字符串,而不是直接赋值
        b.num = 2;
        strcpy(b.name, "li");
        c.num = 3;
        strcpy(c.name, "wu");
    
        // 设置链表连接
        a.next = &b;
        b.next = &c;
        c.next = NULL;
    
        // 将头指针指向第一个节点
        p = &a;
        // ... 其他代码
    
        return 0;
    }
    

    现在,代码应该可以正常编译了。注意使用strcpy来复制字符串,因为直接赋值字符串常量会创建一个内部只读副本,这在C语言中不是链表节点应有的行为。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月29日
  • 创建了问题 2月29日