()、[ ]、*的優先級以及函數和指針


一、()、[ ] 、* 的優先級

()和[ ] 的優先級是相同的,並且都高於*的優先級。

例子:

1.char ptr[4] :由於[ ]的優先級高於 * 因此ptr優先表示一個數組,這個數組中有四個元素,然后在運算,表示指針,所以這表示一個指針數組,里面有四個指針元素。

2.char (*ptr)[4]:很明顯,ptr要先和 * 進行結合,也就是ptr是一個指針,再和[ ]結合,表示一個數組,里面有四個元素,因此ptr表示一個指向有四個元素的數組的指針。

3.char * *ptr:首先ptr先和離得最近的結合,表示一個指針,再和 *結合,又表示一個指針,因此ptr是一個指向指針的指針,並且指向的指針要指向char類型。

4.int (*pti)[3] [4]:ptr和 * 結合,表示一個指針,后面表示一個二維數組,因此pti表示一個指向二維數組的指針。

5.int (*pti[3] ) [4]:pti先和[3]結合,表示一個擁有三個元素的數組,再和 * 結合,此時pti表示一個指針數組,再和外面的數組結合,此時,pti仍舊表示一個含有三個元素的指針數組,並且其中的每個元素(指針)都指向一個擁有四個元素的數組。

二、函數和指針

我們只需要了解函數也占有內存,因此函數也是擁有地址的,所以可以用指針來指向函數(儲存函數收代碼的地址)。

例如:void (*ptf) (double);

ptf就表示一個指向無返回值,接受double類型參數的指針。

1.函數名稱就是一個指針,例如在主調函數中使用被調函數,被調函數名就是一個指針,這個指針儲存着被調函數首代碼的地址,因此可以通過這個指針訪問被調函數,並傳遞參數。

2.現在,我們不把函數作為參數進行傳遞,因為使用頭文件或者extern進行引用式聲明之后就能夠調用函數,而不需要當成參數傳遞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM