C语言中的高级声明--《c和指针》摘要
2012-08-18 11:24
204 查看
分析C语言中的高级声明时,记住三点:
1、用于声明变量的表达式和普通的表达式在求值时所使用的规则相同
2、下标运算符[ ] 和( )的优先级大于*
3、从里往外分解,可以使用替代符号帮助分解
例子:
1、 int (*f) []; int *f[];
前者是指针,指向数组,数组的元素是int
后者是数组,数组的元素是int *指针
2、int f()[]; int f[]();
前者,f()是函数,返回值是int[],声明非法,因为函数返回值只能是标量值,不能是数组
后者,f[] 是数组,数组的元素类型是int () 函数,函数返回值是int,声明非法,因为数组元素长度必须相同,而不同的函数可能具有不同的长度
3、int ( *f [ ] ) ();
[] 优先级比*高,先看f[] ,得知f是数组,再看*,得知数组的元素是指针,指针指向函数,函数返回值是int
这里可用替换的方法帮助分析,如int *f [ ] 和上面的很像
4、int * ( *f [ ] ) ();
5、int *p(int *); int (* p)( int *);
前者是函数声明,函数名p,因为()优先级比*高,所以相当于是(int *) p (int *);
后者是函数指针,指向的函数返回值为int,参数是int *
1、用于声明变量的表达式和普通的表达式在求值时所使用的规则相同
2、下标运算符[ ] 和( )的优先级大于*
3、从里往外分解,可以使用替代符号帮助分解
例子:
1、 int (*f) []; int *f[];
前者是指针,指向数组,数组的元素是int
后者是数组,数组的元素是int *指针
2、int f()[]; int f[]();
前者,f()是函数,返回值是int[],声明非法,因为函数返回值只能是标量值,不能是数组
后者,f[] 是数组,数组的元素类型是int () 函数,函数返回值是int,声明非法,因为数组元素长度必须相同,而不同的函数可能具有不同的长度
3、int ( *f [ ] ) ();
[] 优先级比*高,先看f[] ,得知f是数组,再看*,得知数组的元素是指针,指针指向函数,函数返回值是int
这里可用替换的方法帮助分析,如int *f [ ] 和上面的很像
4、int * ( *f [ ] ) ();
5、int *p(int *); int (* p)( int *);
前者是函数声明,函数名p,因为()优先级比*高,所以相当于是(int *) p (int *);
后者是函数指针,指向的函数返回值为int,参数是int *
相关文章推荐
- C语言中的高级声明--《c和指针》摘要
- C语言中的高级声明--《c和指针》摘要
- C语言声明学习之高级篇(转载)
- C语言声明:const、typedef、define及函数高级声明
- C语言声明学习之高级篇
- C专家编程精华篇----头疼的C语言声明:const、typedef、define及函数高级声明
- [C专家]分析C语言声明—— 关于结构体
- C语言声明数组变量时,在什么情况下,可不指定数组大小
- C语言已死(连载1)——趣味、通俗、实用的计算机达人成长之路之C语言高级技巧篇
- C语言高级测试:为C程序员准备的0x10个最佳问题
- 理解C语言声明的优先级规则
- 《C专家编程》笔记二:第三章 分析C语言的声明
- 【零基础学习iOS开发】【02-C语言】11-函数的声明和定义
- C语言宏的高级应用 #与##作用
- C语言宏的高级应用
- 嵌入式linux之高级c语言专题--指针1
- 解读C语言复杂的声明:char * (*(*a[N])())()
- C语言--- 高级指针2(结构体指针,数组作为函数参数)
- C语言中变量的声明和定义
- C语言定义与声明的区别