Andrewz 发表于 2014-12-21 13:22:52

记录:学习UCOS-II的收获-二级指针的用法.

最近学习ucos,今天终于弄懂了二级指针的用法.
以下是UCOS-II中os_core.c里的一个函数,用到了二级指针.通过学习此指针,将我心中有关 **p 的阴影去除了.
INT16UOSEventPendMulti(OS_EVENT **pevents_pend,OS_EVENT **pevents_rdy,void **pmsgs_rdy,INT32U timeout,INT8U *perr)
{
    OS_EVENT**pevents;
    OS_EVENT   *pevent;
    ...
   *pevents_rdy = (OS_EVENT *)0;//Init array to NULL in case of errors
    pevents   =pevents_pend;//pointer to the pointer array address.
    pevent      = *pevents;//content of the pointed pointer.
    while(pevent!=(OS_EVENT *)0)
                {
                        switch (pevent->OSEventType){//Validate event block types
                        ...
                        }
                        pevents++;
                        pevent = *pevents;
    }
    ...
}


OS_EVENT **pevents_pend
OS_EVENT**pevents;
OS_EVENT   *pevent;
说明.

在申明二级指针时,用两个**加变量名即可.
在函数中,有:
OS_EVENT **pevents_pend,为函数的参数.
1)pevents        =pevents_pend;
2)pevents++;
3)pevent        = *pevents;
等操作,由这几句,可以知道:
1)二级指针的赋值方式,将 二级指针变量=二级指针变量 即可.
2)二级指针操作方法,自加++,知道pevent实际就是 每个内容为指针的变量的地址.自加++就像数组下标自加一样.操作pevent就是选择第几个指针.
3)将pevents的值,即*pevents,即选中的地址,赋给指针变量pevent,即可通过*pevent对其进行操作.

so,
定义
目标量类型 **p;(这个目标量类型可以是struct以包含多种类型)
赋值
p=x;(x为 指针数组的 首地址.)
则:
*p=*x;(指针数组的 第一个值,为地址)
**p=A;(A为 指针数组的 第一个值所指向的 目标量)

&p: 这个指向指针数组的指针变量的地址.
&(*p)=p: 这个指针的值的地址=这个指针.
&(**p)=*p:二级指针指向的值的地址=指针的值.

32MCU 发表于 2014-12-21 17:34:00

也在学习UCOS2,没用它开发过产品。顶一下!

jameszxj 发表于 2014-12-23 19:54:49

ucos还是蛮贵的

机器人天空 发表于 2014-12-23 20:06:50

长姿势了哈哈

Andrewz 发表于 2014-12-28 09:30:38

那天看链表指针,结果当天感冒了.
晚上睡床上,那一条指针连着一个void然后又引出一条指针连到下一个void的无限循环在我脑中转了近2个小时.
根本没法停下来.
{:mad:}
各位感冒会有此类现象吗?

plate_test 发表于 2015-1-11 14:17:50

谢谢分享{:sad:}

wiisir 发表于 2015-1-13 21:11:23

我愚钝,还得多看,体味啊。{:cry:}

HalenYU 发表于 2015-1-13 21:21:35

一般不多看,多看就懂了

32MCU 发表于 2015-4-10 15:51:11

本帖最后由 32MCU 于 2015-4-10 15:52 编辑

网上找的:对 uC/OS-II 内二维指针的研究。

sinxcosytana 发表于 2015-4-15 17:50:13

学习了,最近也在学习ucos
页: [1]
查看完整版本: 记录:学习UCOS-II的收获-二级指针的用法.