C 语言中动态数组的实现
c语言中数组直接申请,int a[10],是存放在栈上。栈是被系统严格管理胡,故数组的大小一经申请便无法再被修改。
因此,动态数组需要在堆中才能实现,使用malloc,calloc等函数在系统中开辟所需的内存空间,接收返回的地址作为数组的首地址(头指针)。在用循环即可进行动态数组的初始化。
注:动态数组需要使用后,需要释放内存空间。
// 函数申请一个动态数组保存 链表中结构体的指针, 从而实现调用qSort函数对结构体排序
void printSortStuList(pStuList mStuList)
{
int i = 0;
int size = mStuList->size; // 获取 学生列表的 大小
//pStu pHead = (pStu)malloc(sizeof(pStu*size));
pStu *mPStuList = (pStu)calloc(size,sizeof(pStu)); // 通过在堆中动态申请所需(size)的内存空间的方式,获取动态数组的头指针
pStu pNew = mStuList -> pHead; // 获取头结点指针,此时已经建立了 动态数组
for(i = 0; i < size; i++){ // 从 0 开始循环遍历动态数组并赋值
mPStuList[i] = pNew;
pNew = pNew->pNext;
}
// .......................
}