?前言:大家好,這里是YY;此篇博客主要是指針的知識(shí)點(diǎn);包含【一二級(jí)指針】【字符指針】【指針數(shù)組】【數(shù)組指針】【以上知識(shí)的實(shí)際應(yīng)用】【函數(shù)指針】【函數(shù)指針數(shù)組】
PS:創(chuàng)作不易,每個(gè)知識(shí)點(diǎn)都有例題或者圖幫助理解;如果對(duì)你有幫助,希望能夠得到您的關(guān)注,贊,收藏,謝謝!??
目錄
一.指針的基本概念
二.理解一級(jí)指針,二級(jí)指針
2.二級(jí)指針傳參
精華.二級(jí)指針的實(shí)際應(yīng)用場(chǎng)景: 鏈表的增刪查改(逐步探究)
三.字符指針
1.字符指針指向常量字符串
*加上const后的數(shù)據(jù)在內(nèi)存中存儲(chǔ)的情況
2.利用字符指針打印字符串
四.指針數(shù)組
1.應(yīng)用:存儲(chǔ)字符串組
2.應(yīng)用:模擬二維數(shù)組
五.&數(shù)組名 / &數(shù)組名[ ] / 數(shù)組名
六.指針類型決定步長(zhǎng)(演示)
七.數(shù)組指針
1.基本概念與形式
2.區(qū)分指針數(shù)組與數(shù)組指針
3.數(shù)組指針的使用
一.(數(shù)組傳參,數(shù)組形式接收)
二.(首元素地址傳參)
*三.(數(shù)組指針傳參)——較繁瑣,在一維數(shù)組上用的比較少
八.指針在二維數(shù)組的應(yīng)用
1.常規(guī)寫法(數(shù)組傳參,數(shù)組形式接收)
2.指針寫法(數(shù)組傳參,數(shù)組指針形式接收)
九.小總結(jié):區(qū)分下列表達(dá)式
1.基礎(chǔ)部分
2.拓展部分?
十.數(shù)組參數(shù),指針參數(shù)要點(diǎn)
1.一維數(shù)組傳參要點(diǎn)
一.數(shù)組形式接收
?二.用指針形式接收
2.二維數(shù)組傳參要點(diǎn)?
一.數(shù)組形式接收
二.用數(shù)組指針形式接收
十一.函數(shù)指針
十二.函數(shù)指針數(shù)組
1.作用與使用演示:
2. 應(yīng)用場(chǎng)景:替代switch case語(yǔ)句
一.指針的基本概念
- 指針就是個(gè)變量,用來(lái)存放地址(地址唯一標(biāo)識(shí)一塊內(nèi)存空間)
- 指針的大小是固定的4/8個(gè)字節(jié)(32位平臺(tái)/64位平臺(tái))
- 指針是有類型的,指針的類型決定了“指針的+-整數(shù)的步長(zhǎng)”,以及解引用時(shí)候的權(quán)限
- 指針之間存在運(yùn)算
二.理解一級(jí)指針,二級(jí)指針
指針:即一個(gè)指針變量指向一份普通類型的數(shù)據(jù),因?yàn)橹羔槺4媪四莻€(gè)數(shù)據(jù)的地址,可以通過(guò)解引用找到它(p1找到a)
一級(jí)指針圖示:
2.二級(jí)指針傳參
二級(jí)指針:即一個(gè)指針變量指向指針,因?yàn)橹羔槺4媪四莻€(gè)數(shù)據(jù)的地址,可以通過(guò)兩次解引用找到它(p2解引用找到p1,再解引用找到a)
二級(jí)指針圖示:
精華.二級(jí)指針的實(shí)際應(yīng)用場(chǎng)景: 鏈表的增刪查改(逐步探究)
我們可以觀察如圖所示的情況:
說(shuō)明:
- pphead是函數(shù)SLPushBack中接收plist地址的指針
- 函數(shù)SLPuchBack實(shí)現(xiàn)的是尾插功能,tail指針變量存儲(chǔ)尾指針,newnode是malloc一個(gè)新節(jié)點(diǎn)以后存儲(chǔ)新節(jié)點(diǎn)的指針
- 當(dāng)SLPushBack()函數(shù)結(jié)束后,會(huì)返還空間,此時(shí)結(jié)構(gòu)體plist再也找不到在堆上的鏈表
- 解決方法:一級(jí)指針!讓plist指向頭指針(如果頭指針不可被修改)guard
- 但是如果頭指針不是哨兵位的頭節(jié)點(diǎn)(guard),而是可以被刪除的結(jié)點(diǎn)呢?
- 解決方法:二級(jí)指針!每一次調(diào)用函數(shù),都會(huì)把plist指向頭指針
三.字符指針
1.字符指針指向常量字符串
字符指針指向常量字符串原理:指針指向字符串首元素的地址
理解圖示:
PS:為滿足“常量字符串不可修改”,需改進(jìn):“指針前加上const”
*加上const后的數(shù)據(jù)在內(nèi)存中存儲(chǔ)的情況
編譯器從內(nèi)存優(yōu)化的角度處理,數(shù)據(jù)只會(huì)存放到同一個(gè)地址
2.利用字符指針打印字符串
打印原理:打印字符串只需要首元素地址
const char*ps="abcdef"; printf("%s\n",ps);
四.指針數(shù)組
指針數(shù)組類型:類型 * [ n ]
1.應(yīng)用:存儲(chǔ)字符串組
2.應(yīng)用:模擬二維數(shù)組
五.&數(shù)組名 / &數(shù)組名[ ] / 數(shù)組名
引入:我們知道arr是數(shù)組名即首元素地址,那&arr是什么?
結(jié)論:
- 除了在sizeof()中,在&arr中,arr(數(shù)組名)指的不是數(shù)組首元素的地址
- &arr的類型是數(shù)組指針(例:int(*pa)[10])
- &arr[0]與arr的類型是指針(例:int*)
六.指針類型決定步長(zhǎng)(演示)
要點(diǎn):&arr取出的是整個(gè)數(shù)組的地址,+1后則跳過(guò)整個(gè)數(shù)組
七.數(shù)組指針
1.基本概念與形式
數(shù)組指針類型:int(*)[10]
int arr[10]={1,2,3,4,5}; int (*pa)[10]=&arr; 取出的是數(shù)組的地址存放到pa中,pa是數(shù)組指針變量
2.區(qū)分指針數(shù)組與數(shù)組指針
- int*p1[10]:指針數(shù)組
- int(*p)[10]:數(shù)組指針
3.數(shù)組指針的使用
一.(數(shù)組傳參,數(shù)組形式接收)
- 數(shù)組傳參傳數(shù)組名的本質(zhì):也是傳首元素地址
- 【數(shù)組的地址=首元素的地址=數(shù)組的起始位置】
二.(首元素地址傳參)
?PS:數(shù)組名是首元素地址:只有兩個(gè)例外:sizeof(數(shù)組名)/&數(shù)組名
*三.(數(shù)組指針傳參)——較繁瑣,在一維數(shù)組上用的比較少
八.指針在二維數(shù)組的應(yīng)用
1.常規(guī)寫法(數(shù)組傳參,數(shù)組形式接收)
代碼圖示:
2.指針寫法(數(shù)組傳參,數(shù)組指針形式接收)
原理:
*所以當(dāng)二維數(shù)組的首元素+1時(shí),直接跳過(guò)一行,來(lái)到下一行
*變化以后,可以視作(一維數(shù)組)首元素的地址”+j”后,訪問(wèn)數(shù)組
原理圖示:
代碼圖示:?
九.小總結(jié):區(qū)分下列表達(dá)式
1.基礎(chǔ)部分
- int*parr1[10]:指針數(shù)組類型
- int(*parr2)[10]:數(shù)組指針類型
- int(*parr3[10])[5]:存放數(shù)組指針的數(shù)組
? ? ??PS: int (*? ? ? ? ? ? ? ? ? ? ) [5] 是?數(shù)組指針?類型,
? ? ? ? ? ? ? ? ? ? ? ?parr3[10]? ?是?數(shù)組?類型
2.拓展部分?
- (*(void(*) ( ) )0 ) ( );函數(shù)類型
- void(*signal(int,void(*)(int)))(int);函數(shù)聲明?
- 可改寫為?
typedef void(*pf_t)(int); pt_f signal(int,pf_t);
十.數(shù)組參數(shù),指針參數(shù)要點(diǎn)
1.一維數(shù)組傳參要點(diǎn)
一.數(shù)組形式接收
要點(diǎn):數(shù)組傳參本質(zhì)上傳的是地址,所以不用專門創(chuàng)建一個(gè)數(shù)組接受——不用規(guī)定大小
代碼演示:?
void test1(int arr[]); void test1(int arr[10]; 均可以順利傳參 int main() { int arr[10]={0}; test1(arr); test1(arr); }
?二.用指針形式接收
代碼演示:
void test1(int*arr); int main() { int arr[10]={0}; test1(arr); }
2.二維數(shù)組傳參要點(diǎn)?
一.數(shù)組形式接收
要點(diǎn):二維數(shù)組的列不能省略,即“列”需要規(guī)定大小
代碼演示:
正確寫法 void test1(int arr[3][5]); void test1(int arr[ ][5]); 錯(cuò)誤寫法: void test1(int arr[ ][ ]); void test1(int arr[3][ ]); int main() { int arr[3][5]={0}; test1(arr); }
二.用數(shù)組指針形式接收
要點(diǎn):必須要用數(shù)組指針接收
代碼演示:
正確寫法: void test1(int(*arr)[5]); 錯(cuò)誤寫法: void test1(int*arr); int main() { int arr[10]={0}; test1(arr); }
十一.函數(shù)指針
函數(shù)指針類型:int(*pf)(int,int)
十二.函數(shù)指針數(shù)組
函數(shù)指針數(shù)組:int(*? ?pfArr[4]? )(int,int)
1.作用與使用演示:
函數(shù)指針數(shù)組作用:可以存放多個(gè)【參數(shù)相同,返回類型相同】的函數(shù)的地址
使用演示:
?
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-451675.html
2. 應(yīng)用場(chǎng)景:替代switch case語(yǔ)句
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-451675.html
到了這里,關(guān)于【C】指針——知識(shí)點(diǎn)大全(詳細(xì),簡(jiǎn)潔,含例題)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!