剛開始看OSTaskDel (INT8U prio)這個任務刪除函數(shù)時,里面的一段代碼有點蹊蹺。
if (ptcb->OSTC————BPrev == (OS_TCB *)0)//任務塊雙向鏈接表的前鏈接是否Null
{
ptcb->OSTCBNext->OSTCBPrev= (OS_TCB*)0;//刪除該任務的任務控制塊OS_TCB
OSTCBList= ptcb->OSTCBNext; //鏈接表指向后一個鏈接
}
else
{
ptcb->OSTCBPrev->OSTCBNext= ptcb->OSTCBNext; // ?
ptcb->OSTCBNext->OSTCBPrev= ptcb->OSTCBPrev; // ?
}
先看一個例子
#include <stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
int * i,* j,a[4]={1,2,3,4};
i = a;// i 內(nèi)容存放a 這個地址,注意,不是把a
//里面存放的內(nèi)容直接存入i內(nèi)容里
j = i;// j 內(nèi)容存放i 這個地址
if ( (j==i)&&(j = =a)&&(*j = = 1) )
{
printf(" truen");
}
else
{
printf(" falsen");
}
system("PAUSE");
return 0;
}
在這里*i = *j = a[1] = 1。
指向地址的變量本應是指向指針的指針變量。程序改為如圖所示,*j 存放的內(nèi)容是i的內(nèi)容,也就是a 這個地址,而*i存放的內(nèi)容就是a[1]的內(nèi)容也就是1,畫圖的話是很容易的。
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
int * i,** j,a[4]={1,2,3,4};
i=a;//a是一個地址,i存放的內(nèi)容是a
j=(int **)i;//i 是一個地址,j存放的內(nèi)容是i
if ((int*)j == (int *)a ) //此處地址類型必須一致
{
printf(" truen");
}
else
{
printf(" falsen");
}
system("PAUSE");
return 0;
}

愛華網(wǎng)


