Chinaunix

标题: 看c语言指针部分时,关于“数组名代表的首地址”,在实际程序中有不理解的地方。 [打印本页]

作者: joychenke    时间: 2014-11-14 14:34
标题: 看c语言指针部分时,关于“数组名代表的首地址”,在实际程序中有不理解的地方。

  1. #define ALLOCSIZE 10000

  2. static char allocbuf[ALLOCSIZE];                /*alloc和afree私有数组*/
  3. static char *allocp = allocbuf;                        /*allocp 指向 allocbuf 下一个空闲位置?????*/


  4. /*调用alloc,申请n个字符的控件*/
  5. char *alloc(int n)                /*返回指向n个字符的指针*/
  6. {
  7.         if(allocbuf + ALLOCSIZE - allocp >= n)               
  8.         {
  9.                 allocp += n;
  10.                 return allocp - n;                /*分配前的指针p*/
  11.         }
  12.         else
  13.                 return 0;
  14. }
复制代码
我的问题是:

1,讲义上,代码第三行的注释是:   allocp指向allocbuf的下一个空闲位置。

但是, 在   static char *allocp = allocbuf;   这条语句中,allocbuf应该等于allocbuf[ALLOCSIZE]的首地址啊?

2,按我的理解allocp是指向allocbuf[ALLOCSIZE]首地址的指针。那么,if判断句不就是  if(ALLOCSIZE >= n)  了吗?

这个地方卡好久了,求大侠帮我解答下,谢谢 。
作者: super皮波    时间: 2014-11-14 15:12
你看的是什么书啊,这代码写的有点蛋疼

1.allocp指向allocbuf的下一个空闲位置
allocp始终指向allocbuf中第一个空闲的位置,这么说你能否理解

2。按我的理解allocp是指向allocbuf[ALLOCSIZE]首地址的指针。那么,if判断句不就是  if(ALLOCSIZE >= n)  了吗?
有可能是多次分配
作者: yulihua49    时间: 2014-11-14 15:25
本帖最后由 yulihua49 于 2014-11-14 15:29 编辑
joychenke 发表于 2014-11-14 14:34
我的问题是:

1,讲义上,代码第三行的注释是:   allocp指向allocbuf的下一个空闲位置。

人家说的没错。那个指针,开始,下一个就是是首地址,后来就是下一个,每次都在走。
那个if的意思,是空间还够不够。
那个allocp一直在动,你要有个变化的观点。
allocp += n;//看见了吗?
作者: joychenke    时间: 2014-11-14 15:46
回复 3# yulihua49

我明白啦,谢谢你!

第三行 static char *allocp = allocbuf ;只是给allocp赋初值。

每执行一次char *alloc(int n) 函数的if语句,allocp都会加n,allocp的值是不断变化的。

所以,第三行注释最好改成 /*allocp一直指向allocbuf[ALLOCSIZE]中第一个空闲位置*/


   
作者: joychenke    时间: 2014-11-14 15:47
回复 2# super皮波

我明白了,对对,你这个注释更好。谢谢!


   
作者: sponge_wxy    时间: 2014-11-14 22:28
这个程序是开辟一个固定大小的数组,然后在这个数组的基础上实现内存分配。所以allocp总是指向allocbuf的第一个空闲位置.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2