为什么程序这样写会报错,主函数中没用指针来进行数据传递

#include
#define Size 10 //定义数组的大小
typedef struct line

{

int data[Size];
int Length;            //当前数组中数据的个数

}Line;

void Creat(Line L, int len); //第一个形参为线性表,第二个形参为要输入数据的个数

void Print(Line L, int len); //输出数据

int main()

{

Line lin;
Creat(lin, 5);
Print(lin, 5);

getchar();
getchar();
return 0;

}

函数调用是值传递,当调用Create 函数时,其实时复制了一份Line数据到形参L,这样实参里的值不会改变。
void Creat(Line L, int len)

参考:

#include <stdio.h>
#define Size 10 //定义数组的大小
typedef struct line
{

    int data[Size];
    int Length;            //当前数组中数据的个数

}Line;

void Creat(Line * L, int len){ //第一个形参为线性表,第二个形参为要输入数据的个数
    for(int i=0;i<len;i++)
    {
        L->data[i]=i;
    }
    return;
}
void Print(Line L, int len){ //输出数据
    for(int i=0;i<len;i++)
    {
        printf("Line [%d]=%d\n", i, L.data[i]);
    }
}

int main()
{
    Line lin;
    Creat(&lin, 5);
    Print(lin, 5);

    getchar();
    getchar();
    return 0;
}

void Creat(Line L, int len);
这里,要使用指针的指针,才能将动态创建的传递回来

void Creat(Line ** L, int len)
{
*L = (Line *)malloc(sizeof(Line));
...
}
imt main()
{
Line * pline;
Creat(&pline, 10);
...
}