c语言结构体指针问题


#include
#include
#define OK 2
typedef int Status; 
typedef int ElemType;
typedef struct{
    ElemType *elem;
    int length;
}SqList; 
Status ListInsert(SqList *L,int e){
    
    ElemType *q=(L->elem);
    ElemType *p=L->elem+L->length-1;
    for(p;p>=q;p--){
        if(*p>e){
            *(p+1)=*p;
            *p=e;
        }
        else
            break;
    }
    L->length++;
    return OK;
}
int main(){
    SqList L;
    L.elem=(ElemType *)malloc(100*sizeof(ElemType));
    int a[]={1,3,5,7};
    L.elem=a;
    L.length=4;
    ListInsert(&L,4);
    for(int i=0;iprintf("%d ",*(L.elem+i));
    return 0;
} 

请问为什么结果打印不出来

供参考:

#include <stdio.h>
#include <stdlib.h>
#define OK 2
typedef int Status;
typedef int ElemType;
typedef struct {
    ElemType* elem;
    int length;
}SqList;
Status ListInsert(SqList* L, int e) {

    ElemType* q = (L->elem);
    ElemType* p = L->elem + L->length - 1;
    for (p; p >= q; p--) {
        if (*p > e) {
            *(p + 1) = *p;
            *p = e;
        }
        else
            break;
    }
    L->length++;
    return OK;
}
int main() {
    int i;
    SqList L;
    L.elem = (ElemType*)malloc(100 * sizeof(ElemType));
    L.length = 0;
    int a[] = { 1,3,5,7 };
    L.length = sizeof(a) / sizeof(a[0]);
    //L.elem = a;
    for (i = 0; i < L.length; i++)
        L.elem[i] = a[i];
    ListInsert(&L, 4);
    for (int i = 0; i < L.length; i++) printf("%d ", *(L.elem + i));
    return 0;
}

L.elem=(ElemType )malloc(100sizeof(ElemType));
int a[]={1,3,5,7};
L.elem=a;
那有这么写的。L.elem=a的话,前面的动态分配不白写了么
=============
int a[]={1,3,5,7};
改为
int a[5]={1,3,5,7};
你数组就4个元素,插入一个就越界了,所以数组要定义的大一点

L.elem=a;
你这是把指针指向了a的地址,并不是赋值
你想把a赋值给L,应该循环