《C和指针》第十三章 高级指针话题

来源:互联网 发布:网络暴力微电影 编辑:程序博客网 时间:2024/05/17 02:33

1.一个指针变量可以指向另一个指针变量,和其他指针变量一样,一个指向指针的指针在他使用之前必须进行初始化,获取目标对象时可以通过执行双重的间接访问操作

2.高级声明:

int f;/*声明一个整数*/int *f;/*声明一个指向整型的指针*/int *f,g;/*这个并不是两个整形指针,而是一个指针,一个整型*/int f();/*一个返回值为整型的函数*/int *f();/*本质是一个函数,函数的返回值为指向整型的指针*/int (*f) ();/*本质是一个指针,指针指向一个返回值为整型的函数*/int  *(*f) ();/*本质是一个指针,指针指向返回值为指向整型的指针的函数*/int f[];/*数组,数组元素为整型*/int  *f[];/*数组,数组元素为指向整型号的指针*/int  f()[];/*其实是非法的,看着像是一个函数,函数的返回值是整型号数组,因为函数只能返回标量,不能返回数组*/int  f[]();/*其实是非法的,看着像是一个数组,数组元素类型是返回值为整型的函数,因为数组元素具有相同的长度,但不同的函数显然可能具有不同的长度*/int  (*f[]) ();/*本质是数组,数组的元素是指针,指针指向具有整型返回值的函数*/int  *(*f[]) ();/*本质是数组,数组的元素是指针,指针指向具有返回值为整型指针的函数*/int  (*f)(int,float);/*是一个函数指针,指向具有返回值为整型的函数*/int  *(*g[])(int,float);/*是一个数组,数组的元素是函数指针,指针指向的函数具有的返回值类型是指向整型的指针*/

3.函数指针(本质上是指针)

最常见的两个用途是转换表和作为参数传递给另外一个函数

4.回调函数的实现使用函数指针,一个指向回调函数的指针可以作为参数传递给另一个函数,后者使用的这个指针调用回调函数,使用这种技巧可以创建通用型函数,而不用担心参数类型不匹配

5.转移表也使用函数指针,转移表由一个函数指针数组组成,这些函数必须具有相同的原型,要确保这些函数的原型出现在这个数组声明之前。转移表就像switch语句一样执行选择,函数通过下标选择某个指针,再通过指针调用对应的函数,例如:

double add(double,double);double sub(double,double);double mul(double,double);double div(double,double);...double(*oper_fun[])(duble,double)={add,sub,mul,div...};result=oper_fun[oper](op1,op2);
6.出现在表达式中的字符串常量的值是一个常量指针,它指向字符串的第一个字符,和数组名一样既可以使用指针表达式又可以使用下标来使用字符串常量

“xyz”+1;结果是一个指针,指向y*“xyz”;结果是x“xyz[2]”;结果是z*(“xyz”+4);结果是不可预测的




0 0