C语言语法

例子:char * const *(*next)();

规则:

  1.声明从名字开始读取,然后按照优先级进行依次读取;

  2.优先级从高到底的顺序:

    2.1 小括号中的部分。

    2.2 后缀操作符:

        例如:小括号(),中括号[]

    2.3 前缀操作符:

        例如:*星号(一般解释为指向什么的指针)

  3.关键字如const等在类型说明符后面的那么当做类型说明符的修饰来用。

第一层: (*next) :next是一个指针

第二层: (*next)():说明这个整体是一个函数,next是一个函数的地址; 注释(后缀操作符的优先级大于前缀操作符)

第三层:*(*next)():把他看成*x,说明它是一个指针(进一步说明这个函数的返回值是一个地址)

第四层:char * const *(*next)():简写成char * const p,说明p是一个指向char类型的常量指针。

总结:next是一个指向函数的指针,他返回的值,也是指向一个char类型的常量指针。

例子:char *(* c[10])(int **p);

  

typedef用法(函数部分):

typedef void (*ptr_to_fun)(int); 表示ptr_to_fun指向一个函数,这个函数接受int类型的参数,并且返回值是void类型

 typedef用法(数据类型部分): 主要是用来给数据类型创建别名

typedef int (*arryay_ptr)[100];

typedef用法(结构体部分):

typedef  struct fruit(int  age);其中的fruit是结构标签,可以用结构标签来定义变量

typede 与宏定义的区别:

  1.宏定义的名字可以用其他类型说明符进行扩展,而typedef 定义的就不能用其他的其他类型说明符进行定义。(typedef是进行了彻底的封装)

    例子:

        #define INTE int

        unsigned INTE I;允许

        typedef UINTE int;

        unsigned UINTE i;不允许

  2.通过宏定义一次性声明的变量,变量的类型可能不一样(指针类型),重命名就不会

 

  

猜你喜欢

转载自www.cnblogs.com/zzy951104/p/9151503.html