日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言中buf内容怎么给指针,C语言 指针的使用

發布時間:2024/9/27 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中buf内容怎么给指针,C语言 指针的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言 指針

當使用變量時出現長度不定,譬如在串口通信中,有些通信協議是不定長的,那么這個就應該使用指針;如果使用數組的話,會有下面這兩個小問題,

要將數組的大小要定的比較大,已保證能夠容納最大的指令,這個相對于短小的指令來說就顯得太浪費數組的資源了

有時候定義的數組很大,對系統的棧的內存會有不小的壓力,因為在局部變量的使用都是在棧上

基于上面這兩個問題,可以使用指針來優化,指針可以在申請時指定長度,不用像數組只要定義了大小就不可改變;此外,指針的分配是在堆內存的,這時需要注意就是不要讓這個指針成為野指針,或者忘了釋放導致內存泄露。

下面就以一個小例子來說明下,這個是在FreeRTOS下使用的函數,所以內存分配函數和釋放函數與標準庫不一樣。

1. 定義:

BYTE * bybuf = NULL; //定義指針時賦值為NULL,避免該指針指到其他不可控的內存單元

2. 申請:

bybuf = (BYTE *)pvPortMalloc(Len);//分配內存,len:長度

//判斷是否內存分配是否成功,若有NULL則內存分配失敗

if(NULL == bybuf)

{

return eeror;

}

2. 初始化

memset(bybuf, 0, Len);//將bybuf指向的內存單元初始化為0,并不是必須的,因為下面立刻又對該內存進行操作,會別重新賦值

3. 使用

對指針指向的內存單元進行賦值操作

*bybuf = 0x11;

*(bybuf+1) = 0x10;

*(bybuf+2) = (BYTE)(screen_id>>8);

*(bybuf+3) = (BYTE)screen_id;

*(bybuf+4) = (BYTE)(control_id>>8);

*(bybuf+5) = (BYTE)control_id;

memcpy(bybuf+6, str, Len);

4. 釋放

//使用完畢后,要釋放該指針,并重新賦值為NULL

if(NULL != bybuf)

{

vPortFree(bybuf);

bybuf = NULL;

}

合起來的整個函數如下:

uint32_t SetTextValue(uint16_t screen_id, uint16_t control_id, uint8_t * str, uint16_t Len)

{

uint32_t error = SYS_ERROR;

BYTE *bybuf = NULL;

bybuf = (BYTE *)pvPortMalloc(Len+6);

if(NULL == bybuf)

{

return error;

}

*bybuf = 0xb1;

*(bybuf+1) = 0x10;

*(bybuf+2) = (BYTE)(screen_id>>8);

*(bybuf+3) = (BYTE)screen_id;

*(bybuf+4) = (BYTE)(control_id>>8);

*(bybuf+5) = (BYTE)control_id;

memcpy(bybuf+6, str, Len);

//使用bybuf

if(NULL != bybuf)

{

vPortFree(bybuf);

bybuf = NULL;

}

return error;

}

總結

以上是生活随笔為你收集整理的c语言中buf内容怎么给指针,C语言 指针的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。