|
最近学习ucos,今天终于弄懂了二级指针的用法.
以下是UCOS-II中os_core.c里的一个函数,用到了二级指针.通过学习此指针,将我心中有关 **p 的阴影去除了.
INT16U OSEventPendMulti(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:二级指针指向的值的地址=指针的值.
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|