#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,应该循环