#include<stdlib.h> #include<string.h> #define MAX 16 typedef struct { int data[MAX]; int length; }SqList; void init(SqList *L) { SqList *L2; int i = 0; L2 = (SqList *)malloc(sizeof(SqList)); L2->length = 10; for (; i < L2->length; i++) { L2->data[i] = 97; } *L = *L2; } void display(SqList L) { int i = 0; for (; i<L.length; i++){ printf("%d ", L.data[i]); } } //****************************************** //参数传入为指针变量的地址 void init2(SqList **L) { int i = 0; // 返回分配给结构的首地址,把它存储到指针变量中 *L = (SqList *)malloc(sizeof(SqList)); (*L)->length = 10; for (; i < (**L).length; i++) { (*L)->data[i] = 12; } } void display2(SqList *L) { int i = 0; for (; i<L->length; i++){ printf("%d ", L->data[i]); } } int _tmain(int argc, _TCHAR* argv[]) { SqList L; init(&L); display(L); printf("\n"); SqList* pL; init2(&pL); display2(pL); return 0; }
如果结构体不定义成指针变量,初始化的时候需要么直接初始化,如果使用init函数初始化,会再次申请一个结构体空间。降低效率。
所以最好用指针。
初始化结构体有2种方式,还可以把结构定义成全局变量,这样无需malloc分配空间。但是一般不要使用全局变量,所以
SqList* pL; init2(&pL); display2(pL);
是最好的。
时间: 2024-12-20 21:20:09