菜鸟问题

zll_lover 2011-03-17 02:07:38
请问static void item_link_q(item *it) { /* item is the new head */
item **head, **tail; /* always true, warns: assert(it->slabs_clsid <= LARGEST_ID); */
assert((it->it_flags & ITEM_SLABBED) == 0);

head = &heads[it->slabs_clsid];
tail = &tails[it->slabs_clsid];
assert(it != *head);
assert((*head && *tail) || (*head == 0 && *tail == 0));
it->prev = 0;
it->next = *head;
if (it->next) it->next->prev = it;
*head = it;
if (*tail == 0) *tail = it;
sizes[it->slabs_clsid]++;
return;
}
请问此处声明为二级指针,但是我觉得声明一级指针为什么不可以呢?谢谢


我改写成
static void item_link_q(item *it) { /* item is the new head */
item *head, *tail;
assert((it->it_flags & ITEM_SLABBED) == 0);

head = heads[it->slabs_clsid];
tail = tails[it->slabs_clsid];
it->prev = 0;
it->next = head;
if (it->next) it->next->prev = it;
*head = it;
sizes[it->slabs_clsid]++;
return;
}
是否可以呢?谢谢
...全文
77 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-03-17
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
selooloo 2011-03-17
  • 打赏
  • 举报
回复
改了的话,功能上依然可以实现,不过这个断言的意义就不一样了
assert((*head && *tail) || (*head == 0 && *tail == 0));
LinuxBirdMan 2011-03-17
  • 打赏
  • 举报
回复
只是实现方法不一样。。没必要纠结。。
delphiwcdj 2011-03-17
  • 打赏
  • 举报
回复
我改写成
static void item_link_q(item *it) { /* item is the new head */
item *head, *tail;
assert((it->it_flags & ITEM_SLABBED) == 0);

head = heads[it->slabs_clsid];
tail = tails[it->slabs_clsid];
it->prev = 0;
it->next = head;
if (it->next) it->next->prev = it;
*head = it;// 这一句改为 head = it;
sizes[it->slabs_clsid]++;
return;
}

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧