常見的一級指針參數
先來看一個最常用函數模型,函數func()參數為一個uint8_t 的指針類型,那這個函數有什么作用?
uint8_t data1[3];
void func(uint8_t *p)
{
p[0]=0x01;
p[2]=0x02;
}
void main()
{
uint8_t *p1=data1;
func(data1);
}
- 在main函數中先定義了一個指針p1,然后把p1指向了一個數組data1。
- 把p1作為參數傳遞進函數func()
- 結果也很容易猜到,就是data1中的值在func運行時被改變了,分別等于0x01,0x02
那我們就不難理解,指針作為參數傳遞進去,而函數內部就可以修改這個指針所指向的數據。如下圖所示:

而這個就是一級指針,簡單的可以看函數定義的參數帶一個 “*” 號就是一級指針。p1就是一個一級指針傳遞進去,而傳遞進去以后就可以修改這個一級指針所指向的地址的數據,也就是data1。
假如我想修改p1所指向的地址,該怎么辦?
如下如所示,現在我想讓p1不再指向data1,而是指向data2

這個很明顯用上面的一級指針作為參數已經實現不了,它只能修改p1所指向的地址的數據,而現在是要修改p1本身讓他指向data2。有的小伙伴可能已經能猜到,p1指向data1我們可以修改data1,那再用一個指針指向p1不就是可以修改p1了。

那這里我們就可以定義一個指針的指針pp1,讓他指向p1,這樣把pp1傳入到函數中,函數內部就可以修改p1的值了。
代碼如下:
uint8_t data1[3];
uint8_t data2[3];
void func2(uint8_t **pp)
{
*p=data2;
}
void main()
{
uint8_t *p1=data1;
uint8_t *pp1=&p1;
func(pp1);
}
89101112
這里傳入的pp1就是一個二級指針,而func2的參數也是帶兩個星號。
那二級指針也就不難理解了,他可以修改指向的指針,也就是修改pp1指向的指針p1的值,讓p1可以指向另外一塊內存。
那實際上一般在使用的時候可能大部分都會省略掉這個pp1而使用更簡便的寫法:
void main()
{
uint8_t *p1=data1;
func(&p1);
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
參數
+關注
關注
11文章
1869瀏覽量
33943 -
函數
+關注
關注
3文章
4417瀏覽量
67499 -
指針
+關注
關注
1文章
484瀏覽量
71843 -
main
+關注
關注
0文章
38瀏覽量
6615
發布評論請先 登錄
相關推薦
熱點推薦
iMatrix平臺中如何使用一級菜單
一級菜單(menu:firstMenu)1.1說明參數說明: showNum:可選。一級菜單顯示的數目。鏈接的url在【系統構建平臺】à【菜單管理】中修改或添加。 1.2使用例子,其頁面顯示如圖:
發表于 05-29 10:43
基于變速積分的PID一級倒立擺研究
本文建立一級倒立擺的數學模型,闡述了變速積分的PID優點,對一級倒立擺的變速積分的PID控制進行仿真,對比傳統PID控制有明顯的性能改進。
發表于 02-03 17:14
?73次下載
Mybatis緩存之一級緩存
本文主要講mybatis的一級緩存,一級緩存是SqlSession級別的緩存。mybatis提供查詢緩存,用于減輕數據壓力,提高數據庫性能。mybaits提供一級緩存,和二級緩存。
發表于 11-27 20:44
?1459次閱讀
配電箱的一級、二級保護措施有哪些
一級保護通常指對電路和設備進行基本的短路保護和過載保護,以確保電路和設備的正常運行。一般采用斷路器、熔斷器、載流開關等設備來實現,具有快速短路保護和過載保護功能,以防止電路和設備燒毀或發生其他嚴重事故。常見的
發表于 04-04 18:02
?9089次閱讀
mybatis一級緩存和二級緩存的原理
MyBatis是一種輕量級的持久化框架,它提供了一級緩存和二級緩存的機制來優化數據庫操作性能。一級緩存是默認開啟的,而二級緩存需要手動配置啟
一級配電箱的作用有哪些
在電力系統的構建中,一級配電箱作為整個系統的起點,扮演著至關重要的角色。它不僅是電源輸入的直接接收者,更是電能分配與控制的核心樞紐。本文將探討一級配電箱的各項功能。 一、一級配電箱的電
一級、二級和三級配電箱的區別
配電箱作為電能分配與控制的核心設備,發揮著至關重要的作用。根據其在電力系統中的位置和作用不同,配電箱可分為一級、二級和三級。本文將深入探討這
常見的一級指針參數有什么作用
評論