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语言 指针的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大学计算机要学多久,大学刚开学要不要带电
- 下一篇: c语言贪吃蛇黑方框,[求助][贪吃蛇]源