📜  C/C++ 中的顺时针/螺旋规则与示例

📅  最后修改于: 2021-10-28 02:48:34             🧑  作者: Mango

Spiral/Clockwise Method 是 C/C++ 程序员在几秒钟内在头脑中定义语法声明含义的神奇工具。此方法由David Anderson创建,这里简要介绍如何应用此方法。

在编码时,当有人遇到新的不需要的语法声明时:

string(const** f(int, void (*const p)(int)))(char[]);

这里出现的问题是函数名“f”的含义是什么?有一种臭名昭著的方法可以帮助人们在几秒钟内推断出这个函数“f”的含义。

方法:

第 1 步:考虑这个顺时针螺旋。

第1步

第 2 步:O替换

第2步

Step3:现在,沿着顺时针方向,替换“|”用一些词尝试理解语法的含义,并替换“|”用“(”。圆括号解释了它的函数并说 “’a’ 是一个函数”。

第 3 步

第 4 步:考虑查看圆括号/函数内部的内容,因此遇到开括号(记住,从运算符的优先级开始,括号总是先开)并从左到右直到圆括号“)”的末尾.它可以说是“‘a’是与整数的‘x’作为自变量的函数”。

第四步

第五步:现在回到第一个圆括号,继续从“(”开始的螺旋路径。用“*”替换“|”。这意味着一个返回值和指针。这里“’a’是一个带有整数的函数’ x’ 作为参数返回指向“.

第 5 步

第六步:继续顺时针旋转。一个人会遇到已经处理过的“int”,所以继续螺旋路径。

第 6 步

第七步:替换“|”与“int”。它可以说是“‘a’是与整数的‘x’作为返回一个指针的整数自变量的函数”。

第 7 步

第 8 步:再次,继续这条路径,会得到“;”这意味着这是语句的结尾,看看这就是如何轻松定义语法的含义。

第 8 步

最后,可以说是“‘a’是一个整数的‘x’作为返回一个指向整数自变量的函数”。

答案: f 是一个参数为 int 的函数和一个参数为 int 的 pa函数,返回一个指向空的常量指针 (void) 返回一个指向常量函数的指针,以字符数组作为参数返回一个字符串。

要点:

  1. 语法说明:
    • A[ ]:数组 A 的大小未定义,A[ 5 ] 表示数组的大小为 5。
    • (type 1,type 2):函数传递type1和type2。
    • *:指向。
  2. 从变量名开始。
  3. 保持这个读数直到变量声明中的所有修饰符都被覆盖。
  4. 始终先完成括号中的任何内容。
  5. 继续以螺旋/顺时针方向执行此操作,直到覆盖所有标记。

例子:
通过想象大脑中的螺旋来考虑一个例子:

char const *p ( int , const (int  *)*);

记住拇指法则。始终以变量的名称开头。从变量 p 顺时针螺旋开始。

第 1 步: ‘p’ 是变量。

p                                              

第 2 步: ‘p’ 是一个指向的变量。

p -> *                                     

第 3 步: ‘p’ 是一个变量,它是一个指向函数的指针。

p -> *  -> (                             

第 4 步: p’ 是一个变量,它是一个指向以 int 作为参数的函数的指针。

p -> *  -> (  -> int               

第五步:下一步,没有变量名,所以给一个。让它成为’a’。所以表达式可以写成:

char const *p ( int , const (int  *)* a );

第 6 步:这里的 ‘a’ 是一个变量。

a     

第 7 步:封闭的圆括号什么也没说,所以继续。

a-> )                          

步骤8:在下一步中,a 是指向的变量指针。

a -> ) -> *      

第9步:忽略分号,因为语法定义不完整,所以继续。

a -> ) -> *  -> ;  

第 10 步:封闭的圆括号什么也没说,所以继续。

a -> ) -> *  -> ; -> )

第 11 步:现在 ‘a’ 是一个指向指针的变量指针。

a -> ) -> *  -> ; -> ) -> *                                                                      

第 12 步: ‘a’ 是指向 int 指针的变量指针。

a -> ) -> *  -> ; -> ) -> * -> int                     

第 13 步: ‘a’ 是指向 int 常量的变量指针。

a -> ) -> *  -> ; -> ) -> * -> int -> const     

让我们回到定义“p”的地方。

第 14 步: ‘p’ 是一个变量,它是一个指向以 int 为参数的函数的指针和一个指向返回常量的指针 int 常量的变量指针。

p -> *  -> (  -> int , const... -> const

笔记:
已经用于定义语法的重用术语在此处被忽略。

第 15 步: p 是一个变量,它是一个指向以 int 为参数的函数的指针和一个指向 int 常量的变量指针,该指针返回一个常量字符。

p -> *  -> (  -> int , const... -> const->char

这完成了语法的完整含义。

笔记:
当语法包含数组(尤其是多维数组)时,此规则有一个例外,因此此规则有更新。

  • 当遇到数组时,移动到最右边的右方括号并将数组视为一次“扫描”
  • 例子:
    • int *a[10][]: ‘a’ 是一个大小为 10 的多维数组和一个未定义大小的指向 int 的指针。
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程