【C语言笔记进阶篇】第一章:指针进阶
目錄
(1)字符指針
(2)指針數組
A:什么是指針數組
B:指針數組的用法
(3)數組指針
A:什么是數組指針
B:數組指針的用法
C:關于指針和數組的再總結
(4)數組參數,指針參數
A:一維數組傳參
B:二維數組傳參
C:一級指針傳參
D:二級指針傳參
(5)函數指針
A:什么是函數指針
B:函數指針及其使用
(6)函數指針數組
A:什么是函數指針數組
B:函數指針數組
C:函數指針數組的用途
(7)指向函數指針數組的指針
(8)回調函數
A:引言
B:void指針
C:qsort函數
D:qsort函數(冒泡排序法模擬實現)
(1)字符指針
第一:一個字符
?
第二:一個字符數組
?
第三:常量字符串
?
關于這個常量字符串,一定要注意以下的這個問題
?
?
所以這個常量字符串感覺像是省略版的“const char* p1”
(2)指針數組
A:什么是指針數組
所謂指針數組,就是存放指針的數組,它的里面存放的全部是指針
?
B:指針數組的用法
指針數組的用處它能保存指針,這種用法尤其體現于數組中,因為數組名就是地址
?
(3)數組指針
A:什么是數組指針
數組指針,其主語就是指針。那么整形指針指向整形數據,字符指針指向字符數據,相應的數組指針也就是指向數組。前面我們說過,數組的數組名表示數組的首元素地址,而如果對數組進行“&arr”這樣的操作,這表示數組的地址,那么數組的地址當然也是需要一個指針來保存的,所以我們把保存數組的地址指針叫做數組指針
?
關于這點,由于數組指針的加入,很多初學者在書寫指針時感到很混亂
?
?
B:數組指針的用法
第一:數組指針不會使用的方法
數組指針被解引用后,就是數組名
?
可以看出這種寫法是在讓人別扭,與其這種寫法,還不如使用數組名
?
第二:數組指針的真正用法
如下:有一個二維數組,調用函數輸出它。
首先我們最常用的輸出方式就是如下
?
而采用數組指針輸出方式如下
?
C:關于指針和數組的再總結
以下寫法均是等價
?
?
?
(4)數組參數,指針參數
A:一維數組傳參
?
B:二維數組傳參
?
C:一級指針傳參
?
?
D:二級指針傳參
?
?
(5)函數指針
A:什么是函數指針
數組指針是指向數組的,函數指針就是指向函數的,也就是函數也是有自己的地址的
這里要注意一點,數組的時候&數組名是數組的地址,數組名是數組首元素的地址。
而函數名和&函數名都是函數的地址
B:函數指針及其使用
函數指針的定義和數組指針基本類似
?
?
(6)函數指針數組
A:什么是函數指針數組
函數指針數組,本質是指針數組,也就是它是存放函數指針的一個數組。
B:函數指針數組
如下,有2個函數,分別表示加減乘除,他們的函數返回類型和參數類型是一致的,所以可以用一個數組保存他們的地址
?
?
C:函數指針數組的用途
函數指針數組能夠很好的保存一組具有相同參數類型,相同返回值的函數的地址。它的一個經典例子就是“轉移表”。比如在計算器例子中,使用switch case語句,如果使用普通方式,要增加一些其他運算時,其case語句要多次增加,顯得很臃腫,而運用函數指針數組,則能避免這種情況,且在后期增加新的相同類型的運算時,在主函數內只需增加新函數地址
?
(7)指向函數指針數組的指針
我們說過,函數指針數組它是一個數組,數組中每個元素是函數指針。通過前面的學習我們知道指向數組的指針叫做數組指針,以此類推,既然函數指針數組是一個數組,那么指向它的指著就叫做指向函數指針數組的指針
?
(8)回調函數
A:引言
回調函數就是把一個函數的地址進行傳參,最后通過地址來調用函數,一下是一個經典例子
?
前面的時候,咋們講過冒泡排序,可以使一組整形數據排序
?
但是這個函數不夠通用,因為在面對浮點型,結構體這種特殊數據時,就不能排序了
B:void指針
前面說過對于int數據,應該定義int*的指針,依次類推,但是不知道這個指針的類型具體是什么的時候,可以將其定義為void類型,也就是空類型
?
所以void指針的特點就在于此,后續講解中也是運用到了void指針的這樣一個特點。但是特別需要注意的一點是,指針類型的意義在于在進行指針移動時其具體需要移動幾個字節的問題,而對于void指針不知道定義的是什么類型,所以不能進行解引用操作。
C:qsort函數
qsort函數就是快速排序,可以幫助我們解決上述的問題,比如下方int數組比較
?
此時,他就可以完成float數組的排序
?
當然他也可以完成結構體的比較
?
D:qsort函數(冒泡排序法模擬實現)
上一節我們講了,qsort函數,qsort函數第四個參數需要我們自己傳入一個比較函數,這個比較函數的返回值是一個大于0,或者小于0或等于0的數,qsor函數通過這樣的一個參數完成具體的排序,交換的過程,其具體的方式是快速排序。但是這里通過冒泡排序,來推究到底這個qsort函數內部是如何實現的
?
指針更深入層次的了解請移步
【C語言重點難點精講】C語言指針_快樂江湖的博客-CSDN博客123https://zhangxing-tech.blog.csdn.net/article/details/120842292
總結
以上是生活随笔為你收集整理的【C语言笔记进阶篇】第一章:指针进阶的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转 -- 推荐几本云计算的经典书籍
- 下一篇: hdu 2824The Euler fu