常見的一級(jí)指針參數(shù)
先來看一個(gè)最常用函數(shù)模型,函數(shù)func()參數(shù)為一個(gè)uint8_t 的指針類型,那這個(gè)函數(shù)有什么作用?
uint8_t data1[3];
void func(uint8_t *p)
{
p[0]=0x01;
p[2]=0x02;
}
void main()
{
uint8_t *p1=data1;
func(data1);
}
- 在main函數(shù)中先定義了一個(gè)指針p1,然后把p1指向了一個(gè)數(shù)組data1。
- 把p1作為參數(shù)傳遞進(jìn)函數(shù)func()
- 結(jié)果也很容易猜到,就是data1中的值在func運(yùn)行時(shí)被改變了,分別等于0x01,0x02
那我們就不難理解,指針作為參數(shù)傳遞進(jìn)去,而函數(shù)內(nèi)部就可以修改這個(gè)指針?biāo)赶虻臄?shù)據(jù)。如下圖所示:
而這個(gè)就是一級(jí)指針,簡單的可以看函數(shù)定義的參數(shù)帶一個(gè) “*” 號(hào)就是一級(jí)指針。p1就是一個(gè)一級(jí)指針傳遞進(jìn)去,而傳遞進(jìn)去以后就可以修改這個(gè)一級(jí)指針?biāo)赶虻牡刂返臄?shù)據(jù),也就是data1。
假如我想修改p1所指向的地址,該怎么辦?
如下如所示,現(xiàn)在我想讓p1不再指向data1,而是指向data2
這個(gè)很明顯用上面的一級(jí)指針作為參數(shù)已經(jīng)實(shí)現(xiàn)不了,它只能修改p1所指向的地址的數(shù)據(jù),而現(xiàn)在是要修改p1本身讓他指向data2。有的小伙伴可能已經(jīng)能猜到,p1指向data1我們可以修改data1,那再用一個(gè)指針指向p1不就是可以修改p1了。
那這里我們就可以定義一個(gè)指針的指針pp1,讓他指向p1,這樣把pp1傳入到函數(shù)中,函數(shù)內(nèi)部就可以修改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就是一個(gè)二級(jí)指針,而func2的參數(shù)也是帶兩個(gè)星號(hào)。
那二級(jí)指針也就不難理解了,他可以修改指向的指針,也就是修改pp1指向的指針p1的值,讓p1可以指向另外一塊內(nèi)存。
那實(shí)際上一般在使用的時(shí)候可能大部分都會(huì)省略掉這個(gè)pp1而使用更簡便的寫法:
void main()
{
uint8_t *p1=data1;
func(&p1);
}
-
參數(shù)
+關(guān)注
關(guān)注
11文章
1868瀏覽量
33545 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4399瀏覽量
66328 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71574 -
main
+關(guān)注
關(guān)注
0文章
38瀏覽量
6506
發(fā)布評論請先 登錄
詳解C語言二級(jí)指針三種內(nèi)存模型
iMatrix平臺(tái)中如何使用一級(jí)菜單
基于變速積分的PID一級(jí)倒立擺研究

Mybatis緩存之一級(jí)緩存

消防工程師的一級(jí)和二級(jí)有哪些區(qū)別
C語言二級(jí)指針的用法與原理

一級(jí)/二級(jí)/三級(jí)配電箱的作用及用途
配電箱的一級(jí)、二級(jí)保護(hù)措施有哪些
C語言中一級(jí)指針、二級(jí)指針和三級(jí)指針

評論