在利用结构体作为函数的参数进行传递时,容易犯的一个错误是将一个野指针传给函数导致错误。
#include <stdio.h>
#include <math.h>
#include <malloc.h>
#define MAXSIZE 10
typedef struct
{
int r[MAXSIZE]; //用于存储要排序的数组,r[0]作为哨兵或者临时变量
int length; //用于记录顺序表的长度
}SqList;
void swap(SqList *L,int i,int j)
{
int temp;
temp=L->r[i];
L->r[i]=L->r[j];
L->r[j]=temp;
}
//冒泡排序1
void Bubble_Sort0(SqList *L)
{
int i,j;
for(i = 0;i < L->length;i++)
{
for(j = i+1;j<L->length;j++)
{
if(L->r[i]>L->r[j])
{
swap(L,i,j);//交换两者的值
}
}
}
}
int main(void)
{
int i;
int temp;
#if 0
SqList L;//定义的变量,系统会分配内存空间
L.length = 10;
temp = L.length;
for(i = 0;i<L.length;i++)
{
L.r[i] = temp--; //逆序赋值
}
Bubble_Sort0(&L); //冒泡排序法
for(i = 0;i<L.length;i++)
{
printf("r[%d] = %d.\n",i,L.r[i]); //顺序输出
}
#else
// SqList *L;//直接定义一个指针是没有指向的,是野指针,程序运行会出错
SqList *L=malloc(sizeof(SqList)); //申请一个内存空间后有了指向,正常运行
L->length = 10;
temp = L->length;
for(i = 0;i<L->length;i++)
{
L->r[i] = temp--; //逆序赋值
}
Bubble_Sort0(L); //冒泡排序法
for(i = 0;i<L->length;i++)
{
printf("r[%d] = %d.\n",i,L->r[i]); //顺序输出
}
#endif
}