5.11指向函數(shù)的指針

C語言中函數(shù)不是變量,單可以定義指向函數(shù)的指針,這種類型的指針可以被賦值存放在數(shù)組中,傳遞給函數(shù)以及作為函數(shù)的返回值等.
前面的函數(shù)定義先不用看.
進入主函數(shù).
首先判斷參數(shù)數(shù)量,并且判斷是否是-n.這里的判斷很奇葩啊判斷strcmp的返回值是不是0.
然后將狀態(tài)變量設(shè)置為1.
然后readlines讀取輸入行,并將首字符的指針放到lineptr中.返回值為行數(shù).這里的函數(shù)之前都有.
OK到了qsort函數(shù),這個函數(shù)需要說的東西很麻煩啊,首先是聲明,void,這個類型書上沒有寫,這個就是傳說中指向指針的指針,首先需要分解一下,void是指向void類型的指針,是一個地址,訪問這個地址就會取得這個地址的數(shù)據(jù),而void是指向之前那個地址的地址.就是說void指向的是void的地址,void*又指向了一個void類型的值.轉(zhuǎn)網(wǎng)上的一段解釋能更好的理解.


void* 是說: 這是一個指針,它指向任何類型的對象.
void** 是說: 這是一個指針,它指向一個void* 型的指針.這個void *的指針又指向任何類型的對象


比如找人一樣。這個人是李四
void * pdes;就好像某人的住址一樣。你到他家就可以找到他了。
但是他爸說,這小子已經(jīng)被我賣了,成了張三的兒子。他爸告訴你張三家的住址,然后你去張三家就可以找到李四了。
張三的地址就是
void ** ppdes;

如果張三說,已經(jīng)把李四又賣了武大。

于是就又要變成
void *** pppes;


就是上面這樣,因為linesptr是指針數(shù)組,其中的元素都是指針,所以想訪問這些指針所指向的內(nèi)容,就需要這種多級指針的聲明.
后面兩個參數(shù)是整數(shù),不考慮.
然后第四個參數(shù),首先int返回值為整數(shù),然后()這個東西說明是一個指向函數(shù)的指針.后面帶個括號(void,void)是這個函數(shù)的參數(shù),帶的兩個void類型的參數(shù).(這里是強制類型轉(zhuǎn)換的類型,意思是將之后的那個函數(shù)強制轉(zhuǎn)換成這個類型.也就是全是void的類型)*
writelines就是按順序輸出.
然后是錯誤信息.
關(guān)于排序函數(shù) 之前也算是講過.
就是把交換的判斷依據(jù)變成了(*comp)(v[i], v[left]<0 )而這個實際的函數(shù)就是那連個numcmp或者strcmp.
就是通過對比兩個字符串,前者大于后者返回正數(shù),前者小于后者返回負數(shù).等于返回0.
如果后者小于前者(<0)的情況下,交換兩個元素的位置.
然后引用自身.
numcmp就是把字符串強制轉(zhuǎn)換成正數(shù),然后比較后返回相應(yīng)的數(shù).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,473評論 3 44
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,905評論 0 38
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 此刻,四哥出去工作,老大去鄰居小區(qū)玩,老二和老三在吵架,二哥不停的去故意逗妹妹,妹妹哭的越厲害…… 而我,就在我房...
    九憶之城閱讀 176評論 0 1
  • 最近兩個月的時間都忙于趕項目進度,都沒有時間好好總結(jié),現(xiàn)在項目基本完成了,就剩下等待審核上線了,不過審核真的是相當...
    喵小帥閱讀 1,746評論 2 13