多级指针的使用

作者在 2007-09-01 08:15:00 发布以下内容

在此,我想为大家谈一谈多级指针的使用问题.我本想不要浪费篇幅来谈多级指针.它对那些使用过的人来说很容易,
但对于刚学的人并不那顺手.当初,我在学的时侯,也不是很明白.所以才拿出来谈一谈.
还是先给一个例子吧.
当程序设计要求:建立一个三级指针变量来管理学生姓名,其二级指针指向一个班,一级指针指向学生姓名.
要求就是这么多,大家可以略微思考一下.从要求中可以分析:我们无法知道一个学校有多少个班和每一个班中有多少名学生.
那么应该怎样做呢.
可以用宏定义#define SCHOOL_CLASS_NUM 50来说明学校拥有多少个班.
可以用一个整型数组student_NUM[SCHOOL_CLASS_NUM]来保存每个班有多少个人.
同时我们又也无法预知学生姓名的长短,同样可以用宏定义#define MAX_STUDENT_NAME 10来说明姓名最长字节数.
实现过程可以:
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<malloc.h>

#define SCHOOL_CLASS_NUM (50)       /*学校拥有的班的数目*/
#define MAX_STUDENT_NAME (10)     /*学生姓名的最长名字*/
char ***stuNameManage=NULL;     /*三级指针来管理学生名*/
int student_NUM[SCHOOL_CLASS_NUM];  /*保存每个班的学生人数*/
int main(void)
{
int i,j;
...
/*输入每个班级的学生人数,在此不予给出student_NUM初始化,相信大家都能实现*/
...

/*申请指向班级的二级指针,数量为学校班级的数目*/
if((stuNameManage=(char***)malloc(sizeof(char**)*SCHOOL_CLASS_NUM))==NULL)
  exit(0);

for(i=0;i<SCHOOL_CLASS_NUM;i++)
{
  /*申请保存学生姓名的一级指针,数量为该班的学生人数*/
  stuNameManage=(char**)malloc(sizeof(char*)*student_NUM);
  for(j=0;j<student_NUM;j++)
    /*为每个指针学生姓名的指针申请MAX_STUDENT_NAME大小的空间*/
    stuNameManage[j]=(char*)malloc(sizeof(char)*MAX_STUDENT_NAME)
}

...
...

/*释放所有申请的空间*/
for(i=0;i<SCHOOL_CLASS_NUM;i++)
{
  for(j=0;j<student_NUM;j++)
    if(stuNameManage[j]!=NULL)
      free(stuNameManage[j]);
  if(stuNameManage!=NULL)
    free(stuNameManage);
}
free(stuNameManage);

return 0;
}
看起来比较复杂,但仔细分析可以得出多级指针的使用也是很有条理的,步骤也是很清析的.
首先申请某个数目的低一级的指针,然后为低一级指针申请更低一级的指针,依此类推下去.
多级指针的空间的释放就是从最低指针所申请的空间释放,然后再往上释放高一级指针的空间,依此类推.
在正式使用多级指针时,一定要注意它的空间大小.当你越界使用时,编译器编译时不会提示出错.
好了,多级指针就说到这里吧.

我的C语言编程经验 | 阅读 2996 次
文章评论,共0条
游客请输入验证码