C语言的高级指针话题

1. 高级声明

只有当确实需要的时候,才应该使用多层间接访问。不然的话,程序将会变得更庞大、更缓慢并且更难于维护。

int f;	/*一个整型变量*/
int *f;	/*一个指向整型的指针*/

第二个声明把表达式*f声明为一个整数。我们就可以推断出f是个指向整形的指针

C声明的这个解释方法可以通过下面的方法验证

int* f,g;	

只有f才是一个指针,g只是一个普通类型的变量。

int f();

它把f声明为一个函数,它的返回值是一个整数

int *f();

f是一个函数,它的返回值类型是一个指向整型变量的指针

int (*f)();

第一对括号只起到聚组的作用,它迫使间接访问在函数调用前进行,使f成为一个函数指针,它的返回值是一个整型值

程序中的每个函数位于内存中的某个位置,所以存在指向那个位置的指针是完全有可能的。

int *(*f)();

f也是一个函数指针,不过它的返回值是一个指向整型值的的指针,必须对它进行间接访问才能得到一个整型值。

(float (*)())

表示一个"指向返回值为浮点类型的函数的指针"的类型转换符

int f[];

f是一个数组。

int *f[];

下标优先级更高。f是一个数组,它的元素类型是指向整型的指针

int f()[];	//错误

f是一个函数,它的返回值是一个整型数组。但是,这个声明是非法的——函数只能返回标量值,不能返回数组。

int f[]();	//错误

这个声明也是非法的,因为数组元素必须具有相同的长度,但不同的函数显然可能具有相同的长度。

int (*f[])();

括号内的表达式*f[]先进行求值,所以f是一个元素位某种类型的指针的数组。表达式末尾的()是函数调用操作符,所以f肯定是一个数组,元素类型为函数指针,它所指向的函数的返回值是一个整型值

int *(*f[])();

这个声明创建了一个指针数组,指针所指向的类型的返回值为一个整型指针的函数

ANSI C标准要求我们使用完整的函数原型,是声明更加准确。

int *f(int,float);int *(*g[])(int,float);

前者把f声明为一个函数指针,它所指的函数接受两个参数,分别是一个整型值和一个浮点型值,并返回一个整型值。

后者把g声明为一个数组,数组的元素类型为一个函数指针,它所指向的函数接受两个参数,分别是一个整型值和一个浮点型值,并返回一个整型指针

1.1 (*(void(*)())0)();
(*(void(*)())0)();

第一步:

假定变量fp是一个函数指针,那么*fp就是该指针所

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值