曲径通幽论坛

标题: 求助 [打印本页]

作者: ustc466    时间: 2009-12-2 15:08
标题: 求助
以下是uC/OS-II中OSMemCreate()中的部分语句,望大家指点:

    void     **plink;

   plink = (void **)addr;                            /* Create linked list of free memory blocks      */
   pblk  = (INT8U *)((INT32U)addr + blksize);
    for (i = 0; i < (nblks - 1); i++) {
       *plink = (void *)pblk;                         /* Save pointer to NEXT block in CURRENT block   */
        plink = (void **)pblk;                        /* Position to  NEXT      block                  */
        pblk  = (INT8U *)((INT32U)pblk + blksize);    /* Point to the FOLLOWING block                  */
    }
    *plink              = (void *)0;

请问,这里红色语句是什么意思啊,怎么又两个 * 啊?
作者: beyes    时间: 2009-12-2 20:10
呵呵,这里没有大家,大概只有我一个人。

两个 * 号表示指针的指针。
作者: ustc466    时间: 2009-12-3 22:02
哦,不好意思!我也知道了是指针的指针,但是为什么要这样做呢?只用指针不行吗?
作者: beyes    时间: 2009-12-4 07:58
不可以。因为内存分区是一个用二维数组构成单项链表,每一个内存块是这个数组的一维,每个内存块中的头一个元素是一个指针,这个指针指向下一个内存块,而上面的 plink 被定义为一个指向内存块中的这个首元素的指针,所以自然是指针的指针。
作者: ustc466    时间: 2009-12-4 10:56
哦,原来时这样的。多谢了!我自己再琢磨琢磨。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2