C语言指针要详细了解有啥好的资料提供吗( 三 )
step3 按照Proc2中的要求,由于exprX中没有*号,所以进入Proc3;
step4 按照Proc3中的要求,result_expr = exprX 返回,RecognizeExpr(expr)子算法结束;
step5 对result_exprX使用type函数获得类型(=\u0026gt;(void(int, int))),即一个输入参量是int int 返回值是void的函数;
step6 变量p的类型即为(=\u0026gt;void(int, int)),即指向输入参量是int int 返回值是void的函数的指针,指针类型识别结束。#
上面三个例子都略微有些简单过程复杂化的嫌疑,但是真正强大的在后面,就能体会到这个方法的好处了
案例4 void (*)(int, int)(*p)
step1 令expr = {void (*)(int, int)(*p)} 执行RecognizeExpr(expr)
step2 按照Proc1中的要求,把*p包起来变成X,获得新表达式exprX = {void (*)(int, int)X},进入Proc2
step3 按照Proc2中的要求,由于exprX中和X同括号层内不存在*号,所以进入Proc3;
step4 按照Proc3中的要求,result_expr = exprX 返回,RecognizeExpr(expr)子算法结束;
step5 对result_exprX使用type函数获得类型(=\u0026gt;((void(*)(int, int)))),即指向(void(*)(int, int))的类型的数组的指针,但是尴尬的是我们还是不知道void(*)(int, int)是啥。
step6 根据约定5,定义表达式_expr = {void(*_p)(int, int)},将_expr 带入RecognizeExpr获取_p的类型,由于这个计算和案例3一模一样,这边直接给出结果_p的类型是(=\u0026gt;void(int, int)),于是原表达式p的类型是(=\u0026gt;((=\u0026gt;void(int, int)))),即p是指向一个数组类型的指针,他的数组元素是指向void(int, int)类型函数的指针,void(int, int)类型函数是输入为int int 返回为空的函数,类型识别结束。#
以下给出的例子是针对C++的 印象中c里面没有const这个关键字
案例5 Const int* p
step1 令expr = {const int* p} 执行RecognizeExpr(expr);
step2 按照Proc1中的要求,把*p包起来变成X,获得新表达式exprX={const int X} ,进入Proc2;
step3 按照Proc2中的要求,由于exprX中没有*号,所以进入Proc3;
step4 按照Proc3中的要求,result_expr = exprX 返回,RecognizeExpr(expr)子算法结束;
step5 对result_exprX使用type函数获得类型const int;
step6 变量p的类型即为(=\u0026gt;const int),即指向int常量类型的指针,指针类型识别结束。#
案例6 int* const p
step1 令expr = {int* const p} 执行RecognizeExpr(expr);
step2 按照Proc1中的要求,把*const p包起来变成X,获得新表达式exprX={int X} ,进入Proc2;
step3 按照Proc2中的要求,由于exprX中没有*号,所以进入Proc3;
step4 按照Proc3中的要求,result_expr = exprX 返回,RecognizeExpr(expr)子算法结束;
step5 对result_exprX使用type函数获得类型int;
step6 变量const p的类型即为(=\u0026gt;int),即指向int类型的指针,而由于p前面有一个const,这就说明p这个指针是个常量,也就是说p本质上是指向int类型的常量指针(注意和案例5中的类型描述的区别)。#
案例7 int * const \u0026amp;p
step1 令expr = {int* const \u0026amp;p} 执行RecognizeExpr(expr);
step2 按照Proc1中的要求,把*const \u0026amp; p包起来变成X,获得新表达式exprX={int X} ,进入Proc2;
step3 按照Proc2中的要求,由于exprX中没有*号,所以进入Proc3;
step4 按照Proc3中的要求,result_expr = exprX 返回,RecognizeExpr(expr)子算法结束;
step5 对result_exprX使用type函数获得类型int;
step6 变量const\u0026amp; p的类型即为(=\u0026gt;int),即指向int类型的指针,而由于p前面有一个const\u0026amp;,这就说明p这个指针的常量引用,也就是说p本质上是指向int类型的常量引用指针(注意和案例5、6中的类型描述的区别)。#
推荐阅读
- OC为何跌出语言榜前十
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 人民车市|新语言、新起点,捷达VS7 强势入局
- C语言 指针引用数组的地址问题
- 零基础入门学习啥语言好
- 营销型外贸网站用哪种建站程序和语言比较好呢主要是适合优化,可扩展兼容性,安全性,后期网站扩展升级
- 花生|血压高的人,吃花生是降血压还是升血压?医生详细做出解答
- 有哪些轻易就被识别的淘宝刷单评论语言
- 国内自主品牌|红旗H9用谁的发动机?详细拆解之后,请正视国产的实力
- C语言指数函数代码
