请将&L改成*L而不出bug:#include<stdio.h> #include<stdlib.h> #define InitSize 10 typedef struct //定义顺序表 { int length; //当前长度 int maxsize; //最大长度 int *data; //定义顺序表元素类型 }SqList; void InitList(SqList L) //顺序表初始化 { //sizeof(int)计算一个整数在内存中所占的字节数 L.data=(int *)malloc(InitSize*sizeof(int)); //申请一片空间 L.length=0; //(int *)是类型转换,将malloc()函数返回的无类型指针(void *)强制转换成整型指针 L.maxsize=InitSize; //顺序表的初始大小-->10 } void WirteSize(SqList &L) //把元素放入顺序表 { printf("要创建的顺序表长度为:"); scanf("%d",&L.length); printf("请输入%d个顺序表元素:",L.length); for(int i=0;i<L.length;i++) { scanf("%d",&L.data[i]); } } bool PrintList(SqList &L) //顺序表的打印 { if (!L.data)//判断是不是空表 return false; printf("顺序表里的元素有:"); for (int i = 0; i < L.length; i++) printf("%d ", L.data[i]); printf("\n"); return true; } int main() { SqList L; InitList(L); WirteSize(L); PrintList(L); return 0; }
时间: 2024-03-20 22:45:15 浏览: 98
将&L改成*L后,代码如下所示:
```
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10
typedef struct {
int length; //当前长度
int maxsize; //最大长度
int *data; //定义顺序表元素类型
} SqList;
void InitList(SqList *L) //顺序表初始化,参数为指针类型
{
L->data = (int *)malloc(InitSize * sizeof(int)); //申请一片空间
L->length = 0;
L->maxsize = InitSize; //顺序表的初始大小-->10
}
void WirteSize(SqList &L) //把元素放入顺序表
{
printf("要创建的顺序表长度为:");
scanf("%d", &L.length);
printf("请输入%d个顺序表元素:", L.length);
for (int i = 0; i < L.length; i++) {
scanf("%d", &L.data[i]);
}
}
bool PrintList(SqList &L) //顺序表的打印
{
if (!L.data) //判断是不是空表
return false;
printf("顺序表里的元素有:");
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
printf("\n");
return true;
}
int main()
{
SqList L;
InitList(&L); //调用函数时传入地址
WirteSize(L);
PrintList(L);
return 0;
}
```
修改的地方为:
1. 在函数声明中,InitList函数的参数类型改为指针类型SqList *L;
2. 在函数体中,对结构体成员的访问改为指针访问L->data、L->length和L->maxsize;
3. 在main函数中,调用InitList函数时传入的参数改为&L的地址,即InitList(&L)。
这样就可以将&L改成*L而不出bug。
阅读全文
相关推荐











