C語言 函數指針 函數指針數組的用法


* pointer1              //該指針指向從該地址開始一個1字節的內容

short int* pointer2;        //該指針指向從該地址開始一個2字節的內容

long int* pointer3;         //該指針指向從該地址開始一個4字節的內容

long long int* ponter4;     //該指針指向從該地址開始一個8字節的內容

 

pointer1++ 使其對應內存地址移動一個字節

pointer2++ 使其對應內存地址移動兩個字節

pointer3++ 使其對應內存地址移動三個字節

pointer4++ 使其對應內存地址移動四個字節

 

typedef void(*FUNC)(void);  //定義函數指針類型FUNC

//打印函數

void printpass()

{

puts("congratunation!");

 }

 void printfail()

 {

  puts("sorry!");

 }

void doprint(int *score,FUNC f)   //執行打印任務

{

printf("your score is %d.\n",*score);  //通過數據指針訪問它所指向的數據

if(NULL!=f)

f();

}

 

int main()

{

const int count = 30;

int scores[count];

 

puts("please input the scores.");

int *p=scores;

for(int i=0;i<count;++i)

{

scanf("%d",p);   //將輸入的地址保存在p所指向的數據元素

++p;

}

//p重新指向第一個元素

p=scores;

FUNC pfunc=NULL; //用函數指針(FUNC f)傳遞函數

for(int i=0;i<count;++i)

{

if((*p)>=60)

pfunc=printpass;

else

punc=printfail;

doprint(p,pfunc);

++p;

 }

return 0;

}

 

typedef struct

{

  void **pMem;        //指向隊列緩存

uint8_t memSize;    //隊列大小

uint8_t readIndex;  //讀隊列索引

uint8_t writeIndex; //寫隊列索引

}Queuemsg_stu_t;

   

 

 

數組比較

u8 gui[5]={1,2,3,4,5},zhou[5]={1,2,3,4,5};  

 

if (memcmp(&gui, &zhou, sizeof(zhou)) == 0)// (memcmp(gui, zhou, sizeof(zhou))

{

}

只要gui[]zhou[]內容一樣,比對取地址和值都是可以比對成功

 

Task_stu_t *pTask_stu_t;

pTask_stu_t  =  (Task_stu_t *)EEEPROM_BASE_ADDR;

&(pTask_stu_t->timeStamp));  地址

(pTask_stu_t->timeStamp));  

 

int *ip;

int vaar=20;

ip=&vaar;

 

    printf(" *ip=%d\r\n", *ip);

printf(" vaar=%d\r\n", vaar);

*ip=30;

printf(" *ip=%d\r\n", *ip);

printf(" vaar=%d\r\n", vaar);

函數參數傳遞

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM