别样的c语言

来源:互联网 发布:企业数据库 编辑:程序博客网 时间:2024/04/28 17:31
1. c语言中不常见的符号的优先级:
(1). 符号.的优先级高于符号*,所以*p.f应该写作(*p).f。


(2). 符号[]的优先级高于符号*,所以int *p[]和int (*p)[]是两种不同的数组,前者是int *类型的数组而后者是int型数组(该数组是二维数组)。
int a = 1;
int *b = &a;
int c[2][2] = {{2,3},{4,5}};


int *p[2] = {&a,b};
int (*op)[2];
op = c;


printf( "数组p里面保存的元素是指针地址:%d %d\n", p[0], p[1] );
printf( "数组p里面的指针元素所指向的内容:%d %d\n",*p[0], *p[1] );
printf( "数组op实际上是一个n行2列的二维数组的指针:%d %d\n", op[0], op[1] );


(3). 符号()的优先级高于符号*,所以int *f()是一个名为f且返回指针是int *类型变量的函数,int (*f)()是一个函数的指针。


(4). 符号==和!=的优先级高于赋值语句。


2. c里面一些生僻的声明:
(1). int (* f())()一个返回类型为函数指针的函数。


(2). int (* f())[m]返回一个n行m列数组的指针,即int (*)[]类型变量。


(3). int (* f[])()是一个数组,一个保存返回值为int类型且参数为空的函数的函数指针的数组。


3. 函数指针:
(1). 函数指针的作用:
作为参数传递给其他函数
作为函数的返回值
保存在数组之中
指向另外一个函数
调用底层函数


(2). 函数指针应该和它所指向的函数是兼容的,函数指针声明的具体格式为“指向函数返回值类型 (*f)(指向函数的参数)”。


(3). 指针赋值方式:
显式转换:f = &func;(func是函数,f为函数指针)
隐式转换:f = func;


(4). 指针函数的调用:
显示调用:*f();
隐式调用:f();
1 2
原创粉丝点击