为什么结构体初始化不能直接放数组放进去?那正确的初始化方法是什么?

为什么结构体初始化不能直接放数组放进去?那正确的初始化方法是什么?

img


完整片段代码:

//链表的插入
void insert_book(char name[], char book_number[], int price, int num)
{
    LinkList_book* p = NULL;
    p = (LinkList_book*)malloc(sizeof(LinkList_book));
    Book book = { name, book_number, price, num};//?

    p->data = book;
    LinkList_book* q = NULL;
    q = L_book->next;
    while (q != NULL)
    {
        q = q->next;
    }
    p->next = q->next;
    q->next = p;
}

完整结构体代码:

img

红框中是错误是因为类型不一样,一个char *,一个char
创建 Book 并赋值应该这样:

    Book book;
    strcpy(book.name, name);
    strcpy(book.book_number, book_number);
    book.price=price;
    book.num=num;
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7786601
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:设计一个算法判别一个算术表达式的圆括号是否正确配对
  • 除此之外, 这篇博客: 可能你看到的大部分教材里讲的指针和指针变量是一个概念,但是真的是这样吗?看完我这篇文章肯定会颠覆你的认知哦?中的 3、什么是指针变量? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 指针变量的本质是变量,是用来存放地址的!也就是说指针变量是用来存放数据的。

  • 您还可以看一下 任大勇老师的数据分析思维及方法课程中的 归集数据指标,数据指标拆解与确定数据维度小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    结构体的初始化方法有很多种,常见的有以下几种:

    1. 直接按类型定义的方式进行初始化

    例如:

    struct student {
        int id;
        char name[20];
        float score;
    };
    
    int main() {
        struct student s = {1, "Tom", 90.5};
        return 0;
    }
    

    这种初始化方式的好处是简单明了,可以快速完成结构体变量的初始化。但是,如果结构体中有很多元素,如果手动一个个初始化就比较麻烦。

    1. 使用“点”运算符对结构体变量进行赋值

    例如:

    struct student {
        int id;
        char name[20];
        float score;
    };
    
    int main() {
        struct student s;
        s.id = 1;
        strcpy(s.name, "Tom");
        s.score = 90.5;
        return 0;
    }
    

    这种初始化方式看起来比较麻烦,但是灵活性比较大,可以根据具体情况进行灵活操作。

    1. 使用指针方式初始化结构体

    例如:

    struct student {
        int id;
        char name[20];
        float score;
    };
    
    int main() {
        struct student *ps;
        ps = (struct student *)malloc(sizeof(struct student ));
        ps->id = 1;
        strcpy(ps->name, "Tom");
        ps->score = 90.5;
        free(ps);
        return 0;
    }
    

    这种初始化方式比较灵活,可以根据需要动态分配内存并进行初始化,但是需要注意内存泄漏的问题。

    如果使用数组直接放入结构体进行初始化出现问题,可能是由于数组的类型与结构体中的某个元素类型不匹配。例如,如果一个结构体中包含指针类型的元素,直接将数组放入结构体中进行初始化就会出问题。

    正确的初始化方式需要根据具体情况进行选择,一般建议使用第一种方式进行初始化。如果需要动态分配内存,可以使用第三种方式,需要注意及时释放内存避免内存泄漏。