()、[ ]、*的优先级以及函数和指针


一、()、[ ] 、* 的优先级

()和[ ] 的优先级是相同的,并且都高于*的优先级。

例子:

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