指针

来源:互联网 发布:苹果app淘宝充值退款 编辑:程序博客网 时间:2024/05/18 01:07

2010-08-27先从语法层面说起吧。
1.()和[]都是后置算符,具有同样的高优先级
2.语言的设计者认为相似的语法结构就应该有相似的使用方式:
在声明时:
int array[常量表达式_元素个数];//声明数组
int function(形参表列);//声明函数

int (*pa)[常量表达式_元素个数]//声明指向数组的指针
int (*pf)(形参表列);//声明指向函数的指针

在使用时:
pa=&array; //指向具体的数组
pf=&function; //指向具体的函数

(*pa)[表达式_下标]; //间接引用数组元素
(*pf)(实参表列); //间接调用函数
===============================
上述两两对比,可以发现语法相似原则。

3.但是数组元素的指针间接引用还有另一种形式:
int *pe; //声明指向数组元素的指针
int (*pf)(形参表列);//声明指向函数的指针

pe=array; //指向数组的首元素
pf=function; //指向函数的入口地址_首址

pe[表达式_下标]; //引用数组元素
pf(实参表列); //调用函数
这里运用了一个语法知识,数组名表示数组首址、函数名表示函数首址----它们都是指针常量
=========================================
显然相似并不是相同,我们知道array与 &array不同,前者是首元素地址、后者是数组地址;
但是,function与&function却没有区别,两者都是函数首址!

4.结果是对函数首址及其间接引用而言
function, &function, &&function, ....都是一样的;
pf() ,(*pf)(), (**pf)(), .....都是一样的。当然除了前两对,后边的表达形式没有实际意义了。

***********************
function与 &function等价
pf()与(*pf)()等价
***********************

原创粉丝点击