为什么这里调用另外一个子函数不需要加&,明明主函数里调用就需要加&啊😨
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList *L)
{
L->elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
if(!L->elem)
{
return -1;
}
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return 1;
}//初始化
int ListInsert_Sq(SqList *L, int i, int e)
{
if(i<1 || i>L->length+1)
{
return -1;
}
if(L->length >= L->listsize)
{
int *newbase = (int *)realloc(L->elem, (L->listsize+LISTINCREMENT) * sizeof(int));
if(!newbase)
{
return -1;
}
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
int *q = &(L->elem[i-1]);
for (int *p=&(L->elem[L->length-1]); p>=q; --p)
{
*(p+1) = *p;
}
*q = e;
++L->length;
return 1;
}//插入
void show(SqList *L)
{
int i;
for(i = 0;i<L->length;i++)
{
if(i==L->length-1) printf("%d\n", L->elem[i]);
else printf("%d ", L->elem[i]);
}
}//输出
int LocateElem(SqList *L, int i)
{
int j, t = 0;
if (!L->elem)
exit(0);
for (j = 0; j < L->length; j++)
{
if (L->elem[j] == i)
{
t = 1;
break;
}
}
if (!t)
return 0;
else return j + 1;
}//查询i在什么位置
int ListEmpty(SqList *L)
{
if(L->length==0)
{
return 0;
}
return 1;
}
void PriorElem(SqList *L)
{
int i,e,j;
printf("输入要查找前驱的元素:");
scanf("%d",&j);
i=LocateElem(L,j);
if(i<=1 || i>L->length)
{
printf("输入错误\n");
}
e=L->elem[i-2];
printf("%d的前驱元素是:%d\n",i,e);
}//求前驱
int main()
{
SqList L,l;
InitList_Sq(&L);
int e;
for(int i=1; i<=10; i++)
{
ListInsert_Sq(&L, i, i);
}
show(&L);
printf("查询5在什么位置:");
printf("%d\n",LocateElem(&L,5));
PriorElem(&L);
}