C语言指针问题
#include<stdio.h>
#include<stdlib.h>
typedef int Elem;
typedef struct
{
Elem *elem; //指向顺序表的指针
Elem length; //顺序表长度
}Sqlist;
void Input(Sqlist l,int size); //输入la lb
void Combine(Sqlist la,Sqlist lb); //合并la lb
void Order(Sqlist l); //从大到小排序
int main()
{
int size; //顺序表长度size 计数器
Sqlist la,lb;
printf("请输入顺序表la中元素个数\n");
scanf("%d",&size);
la.length=size;
Input(la,size);
printf("请输入顺序表lb中元素个数\n");
scanf("%d",&size);
lb.length=size;
Input(lb,size);
Combine(la,lb);
scanf("%d",&size);
return 0;
}
void Input(Sqlist l,int size)
{
int i;
//l.length++; 错误 因为仅为length申请内存但是没为其赋值所以length的值是原来内存中的值没有意义
l.elem=(Elem*)malloc(size*sizeof(Elem));
for(i=0;i<size;i++)
{
printf("请输入第%d个元素\n",i+1);
scanf("%d",l.elem+i);
}
for(i=1;i<=l.length;i++)
{
printf("第%d个元素为%d\n",i,*(l.elem+i-1));
}
Order(l);
}
void Order(Sqlist l) //冒泡排序法 对整个一维数组排序 而打擂台尽是找出最值
{
Elem t; //中间赋值变量
int i,j,*p;
/*for(i=0;i<l.length-1;i++)
for(j=0;j<l.length-i-1;j++)
if(*(l.elem+j)>*(l.elem+j+1))
t=*(l.elem+j),*(l.elem+j)=*(l.elem+j+1),*(l.elem+j+1)=t;*/
printf("排序输出\n");
for(i=0;i<l.length-1;i++) //地址自增法
for(p=l.elem,j=0;j<l.length-i-1;j++,p++)
if(*p>*(p+1))
t=*p,*p=*(p+1),*(p+1)=t;
for(i=1;i<=l.length;i++)
{
printf("第%d个元素为%d\n",i,*(l.elem+i-1));
}
}
void Combine(Sqlist la,Sqlist lb)
{
Sqlist lc; //合并后的表
int j; //计数器
lc.length=la.length+lb.length;
printf("合并后表长度为%d\n",lc.length);
lc.elem=(Elem *)malloc(lc.length *sizeof(Elem));
if(!lc.elem)
printf("申请内存失败\n");
for(j=0;j<la.length;j++)
{
*(lc.elem+j)=*(la.elem+j);
printf("%d",*(lc.elem+j));
}
for(j=0;j<lb.length;j++)
{
*(lc.elem+j+la.length)=*(lb.elem+j);
}
for(j=1;j<=lc.length;j++)
{
printf("第%d个元素为%d\n",j,*(lc.elem+j-1));
}
}
*(lc.elem+j)=*(la.elem+j);试了好多次,发现是这一句有问题。
求高手解释!!!