Chinaunix
标题:
看c语言指针部分时,关于“数组名代表的首地址”,在实际程序中有不理解的地方。
[打印本页]
作者:
joychenke
时间:
2014-11-14 14:34
标题:
看c语言指针部分时,关于“数组名代表的首地址”,在实际程序中有不理解的地方。
#define ALLOCSIZE 10000
static char allocbuf[ALLOCSIZE]; /*alloc和afree私有数组*/
static char *allocp = allocbuf; /*allocp 指向 allocbuf 下一个空闲位置?????*/
/*调用alloc,申请n个字符的控件*/
char *alloc(int n) /*返回指向n个字符的指针*/
{
if(allocbuf + ALLOCSIZE - allocp >= n)
{
allocp += n;
return allocp - n; /*分配前的指针p*/
}
else
return 0;
}
复制代码
我的问题是:
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