C语言复杂指针阅读方法 - 右左法则

举报
CodeAllen 发表于 2021/10/29 23:46:52 2021/10/29
1.6k+ 0 0
【摘要】 C语言复杂指针阅读方法 - 右左法则 引言英文原文 正文左右法则方法:举例:扩展 引言 这是一个简单的法则,但能让你准确理解所有的声明 英文原文 可以看下我之前的文章 The...

C语言复杂指针阅读方法 - 右左法则

引言

这是一个简单的法则,但能让你准确理解所有的声明
在这里插入图片描述

英文原文

可以看下我之前的文章
The “right-left“ rule

不过我还是用比较容易理解的方式记录一下

正文

左右法则方法:

1.从最里边的圆括号中未定义的标识符看起
2.首先往右看,在往左看
3.遇到圆括号或方括号时可以确定部分类型,并调转方向
4.重复2 3 步骤,直到阅读结束

举例:

int (*p1)(int*, int (*f)(int*)); 
//p1为指针,指向函数,指向的函数参数为int*, f为第二个参数,他是函数指针,指向的函数参数时int*,返回值是int,,,,返回值是int
  
int (*p2[5])(int*);  
//p2为数组,有5个参数,这5个参数为指针指向函数,函数类型为int(int*)
   
int (*(*p3)[5])(int*);  
//p3是指针,数组指针,指向的数组有5个元素,这5个元素是指针,函数类型是int(int*)
   
int*(*(*p4)(int*))(int*);  
//p4是指针,是函数指针,参数时int*,返回值为指针,是指针函数,指向的函数类型是int(int*)

int (*(*p5)(int*))[5];
//p5是指针,是函数指针,参数时int*,返回值为指针,指向数组,指向的数组类型是int[5]

  
 

扩展

不过代码中还是应该尽可能使用简单的表达
简化的方法就是typedef,这个是使用的非常广的,可以简化指针和数组的定义
但是在简化之前应该先读懂这个代码!!!

int (*(*p5)(int*))[5];

typedef int(ArrayType)[5];
typedef ArrayType*(FuncType)(int*);

FuncType* p5;      //就是这样就简化了很多

  
 

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/105473062

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。