码迷,mamicode.com
首页 > 其他好文 > 详细

为什么结构体一般定义成指针变量?

时间:2015-07-27 20:43:21      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:

#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);

是最好的。

为什么结构体一般定义成指针变量?

标签:

原文地址:http://www.cnblogs.com/qiangua/p/4681056.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!