C语言杂记 0x04

函数(function)

函数的返回值可以理解为:定义一个和返回值类型相同的变量,并且用return后面的语句进行初始化

函数分返回值不是左值,或者说函数表达式不能作为左值,因此下面的表达式是违法的
is_even(20) = 1;

循环和递归

递归能解决的问题循环也能解决,只是解决的思路不一样

对于递归来说,分配和释放了好多地址空间,所有变量都是在初始化的时候被赋值,然后就没再发生过改变,
对于循环来说,一直都是一个变量n和一个变量result在发生变化,这两种思路,前一种被称作函数式编程(Function Programming),
而后一种思路成为命令式编程(Imperative Programming)

两者的区别类似于Declarative和Imperative的区别,Impreative描述的是一步一步怎么做,Declarative描述的是应该做什么,
比如SQL语言就是典型的Declarative,而我们的C语言就是Imprative

接下来说一下Function Programming
函数式编程的“函数”类似于数学函数的概念,数学函数是没有Side Effect的,而C语言的函数是存在Side Effect的,
Side Effect是指“副作用”,比如printf函数,我们并不需要他给我们返回什么,而是需要他的“控制台打印”功能(更加具体的细节感兴趣可以去了解一下)

很多语言是避免Side Effect的,例如LISP、Haskell、Erlang等

++和- -运算符

i++   返回i然后 i=i+1
i--   返回i然后 i=i-1le
++i   i=i+1 然后返回i
--i   i=i-1 然后返回i

这四个表达式入过都看成函数的话则都存在Side Effect,返回的是i,Side Effect是i发生了变化

goto语句

goto语句过于强大了,从程序中的任何地方都可以无条件跳转到任何其它地方,只要在那个地方定义一个标号就行,唯一的限制是goto只能跳转到同一个函数中的某个标号处,而不能跳到别的函数中。

滥用goto语句会使程序的控制流程非常复杂,可读性很差

猜你喜欢

转载自blog.csdn.net/ahzahz/article/details/81052465