C语言学习记录:复杂的声明(声明中含有*、()、[])

声明时可使用的符号

符号含义
*表示一个指针
( )表示一个函数
[ ]表示一个数组

复杂声明示例:

int board[8][8];        //声明一个内含int数组的数组

int ** ptr;             //声明一个指向指针的指针,被指向的指针指向int

int * risks[10];        //声明一个内含10个元素的数组,每个元素都是指向int的指针

int (* rusks)[10];      //声明一个指向数组的指针,该数组内含10个int的指针

int * off[3][4];        //声明一个指向3×4的二维数组,每个元素都是指向int的指针

int (* uuf)[3][4];      //声明一个指向3×4二维数组的指针,该数组中内含int类型值

int (* uof[3])[4];      //声明一个内涵3个指针元素的数组,其中每个指针都指向一个内含4个int类型元素的数组

关键问题是 *( )[ ] 的优先级问题。

( )[ ] 具有相同的优先级,比 * 的优先级高。结合时,从左往右结合。

函数和指针的纠缠关系

函数原型:

void ToUpper(char *);

指针指向该函数类型:

void (*pf)(char *);    //pf是一个指向函数的指针

如果第一个圆括号省略:

void *pf(char *);    //pf是一个返回字符指针的函数

函数名可以用于表示函数的地址:

void ToUpper(char *);
void ToLower(char *);
int round(double);
void (*pf)(char *);

pf = ToUpper;    //有效,ToUpper是该类型函数的指针
pf = ToLower;    //有效,ToLower是该类型函数的指针

pf = round;      //无效,round与指针类型不匹配
pf = ToLower();  //无效,ToLower()不是地址

最后一句的无效不仅仅是因为他不是地址,而且 ToLower() 的返回类型是 void ,它无返回值,不能在赋值语句中进行赋值。

指针 pf 只能指向 char * 参数,返回类型为 void 的函数!

其实这种方法使用函数在某些方面也比较简单的。

(在此就不说明指针函数的使用方法了)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值