免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2585 | 回复: 6
打印 上一主题 下一主题

[C] 看c语言指针部分时,关于“数组名代表的首地址”,在实际程序中有不理解的地方。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-14 14:34 |只看该作者 |倒序浏览

  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)  了吗?

这个地方卡好久了,求大侠帮我解答下,谢谢 。

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
2 [报告]
发表于 2014-11-14 15:12 |只看该作者
你看的是什么书啊,这代码写的有点蛋疼

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

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

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
3 [报告]
发表于 2014-11-14 15:25 |只看该作者
本帖最后由 yulihua49 于 2014-11-14 15:29 编辑
joychenke 发表于 2014-11-14 14:34
我的问题是:

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

人家说的没错。那个指针,开始,下一个就是是首地址,后来就是下一个,每次都在走。
那个if的意思,是空间还够不够。
那个allocp一直在动,你要有个变化的观点。
allocp += n;//看见了吗?

论坛徽章:
0
4 [报告]
发表于 2014-11-14 15:46 |只看该作者
回复 3# yulihua49

我明白啦,谢谢你!

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

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

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


   

论坛徽章:
0
5 [报告]
发表于 2014-11-14 15:47 |只看该作者
回复 2# super皮波

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


   

论坛徽章:
0
6
发表于 2014-11-14 15:50
回复 2# super皮波

自学c语言,看的是c programming language (second edition)的中文版。


   

论坛徽章:
0
7 [报告]
发表于 2014-11-14 22:28 |只看该作者
这个程序是开辟一个固定大小的数组,然后在这个数组的基础上实现内存分配。所以allocp总是指向allocbuf的第一个空闲位置.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP