c的复杂声明和typedef

2018-12-02  本文已影响0人  梦落迹南天

这几个东西,总是个总结了又忘,又搞混淆了,还是写下来好回顾

C语言中声明的优先级规则

C专家编程中提到C语言中声明的优先级规则如下
优先级从高到低分别是
1.括号括起来的部分
2.后缀操作符,括号()表示这是一个函数,而中括号 [ ]表示这是一个数组

  1. 前缀操作符,星号 * 表示“指向..的指针"
    4.如果const 或 volatile关键字的后面紧跟类型说明符(比如int, long等),那么它作用于类型说明符。在其他的情况下,const和volatile关键字作用于它左边紧邻的指针星号
    5.右结合

书中的几个例子:
char * const * ( *next ) ( );
next是一个指针,指向一个返回类型为char * const * 的函数,该类型是一个

指向于
    只读(const)的
    指向于char类型
    的指针
的指针

char ( c[10])(int *p)
c是一个数组,该数组的类型是指向于类型为 char
(int *p)的函数,该函数返回值为char ,参数类型为int **

void ( * signal( int sig, void( * func )( int ) ) ) (int );
signal是一个函数,该函数有两个参数 sig 和func,func是是一个指针,指向于void (int)的函数,signal是一个函数,该函数的是一个志向与 void (int)类型函数的指针

typedef

typedef 作用是创建一个新的类型关键字,如下
typedef void(* ptr_to_func) (int);
当使用这个ptr_to_func关键字进行声明的时候,声明的东西直接代入即可,譬如
ptr_to_func func 其实等价于 void ( *func )( int )
以及
ptr_to_func signal(int ,ptr_to_func) 等价于 void ( * signal( int sig, void( * func )( int ) ) ) (int );

函数指针、指针函数、常量指针、指针常量

中文上的识别方式,统一看最后两个字,最后两个字确定这是什么东西
函数指针:这是一个指针,指向于函数
指针函数: : 这是一个函数,返回值为指针
常量指针: 这是一个指针,指向于常量
指针常量 : 这是一个常量,常量修饰的是指针

上一篇 下一篇

猜你喜欢

热点阅读