为什么结构体初始化不能直接放数组放进去?那正确的初始化方法是什么?
//链表的插入
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;
}
完整结构体代码:
红框中是错误是因为类型不一样,一个char *,一个char
创建 Book 并赋值应该这样:
Book book;
strcpy(book.name, name);
strcpy(book.book_number, book_number);
book.price=price;
book.num=num;
指针变量的本质是变量,是用来存放地址的!也就是说指针变量是用来存放数据的。
结构体的初始化方法有很多种,常见的有以下几种:
例如:
struct student {
int id;
char name[20];
float score;
};
int main() {
struct student s = {1, "Tom", 90.5};
return 0;
}
这种初始化方式的好处是简单明了,可以快速完成结构体变量的初始化。但是,如果结构体中有很多元素,如果手动一个个初始化就比较麻烦。
例如:
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;
}
这种初始化方式看起来比较麻烦,但是灵活性比较大,可以根据具体情况进行灵活操作。
例如:
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;
}
这种初始化方式比较灵活,可以根据需要动态分配内存并进行初始化,但是需要注意内存泄漏的问题。
如果使用数组直接放入结构体进行初始化出现问题,可能是由于数组的类型与结构体中的某个元素类型不匹配。例如,如果一个结构体中包含指针类型的元素,直接将数组放入结构体中进行初始化就会出问题。
正确的初始化方式需要根据具体情况进行选择,一般建议使用第一种方式进行初始化。如果需要动态分配内存,可以使用第三种方式,需要注意及时释放内存避免内存泄漏。