函数的本质

1.程序=数据+算法;C语言=数据+函数;模块化程序设计;

2.面向过程是一种以过程为中心的编程思想

3.首先将复杂的问题分解为一个个容易解决的问题

4.分解过后的问题可以按照步骤一步步完成

5.函数是面向过程在C语言中的体现

6.解决问题的每个步骤可以用函数来实现

7.程序中的声明可以理解为预先告诉编译器实体的存在,如:变量,函数,等等

8.程序中的定义明确指示编译器实体的意义

声明和定义并不相同

extern int a;//声明是其他文件的变量,不需要分配空间
int a=10;//定义,分配一个空间

9.函数参数在本质上与局部变量相同,都是在栈上分配空间

10.函数参数的初始值是函数调用时的实参值

11.函数参数的求值顺序依赖于编译器的实现,C语言中大多数运算符对其操作数求值的顺序都是依赖于编译器的实现的!!!

12.程序中存在一定的顺序点

13.顺序点指的是执行过程中修改变量值的最晚时刻

14.在程序达到顺序点的时候,之前所做的一切操作必须反映到后续的访问中

15.每个完整表达式结束时

16.&&,||,?;以及逗号表达式的每个运算对象计算之后

17.函数调用中对所有实际参数的求值完成之后(进入函数体之前)

18.C语言会默认没有类型的函数参数为int

19.C语言中可以定义参数可变的函数

20.参数可变函数的实现依赖于stdarg.h头文件

21.va_list变量与va_start,va_end和va_arg配合使用能够访问参数值

22.可变参数必须从头到尾按照顺序逐个访问

23.参数列表中至少要存在一个确定的命令参数

24.可变参数宏无法判断实际存在的参数的数量

25.可变参数宏无法判断参数的实际类型

26.va_arg中如果指定了错误的类型,那么结果是不可预测的

27.宏是由预处理器直接替换展开的,编译器不知道宏的存在

28.函数是由编译器直接编译的实体,调用行为有编译器决定

29.多次使用宏会导致程序代码量增加

30.函数是跳转执行的,因此代码量不会增加

31.宏的效率比函数要高,因为是直接展开,无调用开销

32.函数调用时会创建活动记录,效率不如宏

33.宏的效率比函数稍高,但是其副作用巨大,容易出错

34.函数存在实参到形参的传递,因此无任何副作用,但是函数需要建立活动形象,效率受影响

35.宏参数可以是任何C语言实体,宏编写的_MIN_参数类型可以是int,float等等,宏的参数可以是类型名。

36.活动记录是函数调用时用于记录一系列相关信息的记录

临时变量域:用来存放临时变量的值,如K++的中间结果

局部变量域:用来存放函数本次执行中的局部变量

机器状态域:用来保存调用函数之前有关机器状态的信息,包括各种寄存器的当前值和返回地址等

实参数域:用于存放函数的实参信息

返回值域:为调用者函数存放返回值

37.

时间: 2024-10-12 13:05:04

函数的本质的相关文章

python入门基础-三元表达式、命名空间、作用域、函数名本质、闭包

1.三元表达式(三目运算式) #1 三元表达式(三目运算法) #格式为: 为真时的结果 if 判定条件 else 为假时的结果 #另外三元表达式只适合较为简洁的条件判定,较为复杂的判定建议不要用这种方式写代码,因为比较让他人难以理解. a = 10 b = 15 compare = a if a > b else b #谁大返回谁 print(compare) 2.命名空间(namespace) #2 命名空间(namespace) #命名空间是名称和对象的印象,也可以将命名空间理解成一个字典,

JS中函数的本质,定义、调用,以及函数的参数和返回值

要用面向对象的方式去编程,而不要用面向过程的方式去编程 对象是各种类型的数据的集合,可以是数字.字符串.数组.函数.对象…… 对象中的内容以键值对方式进行存储 对象要赋值给一个变量 var cat={ "name":"喵1", "age":4, "family":["喵爸","喵妈"], "speak":function(){ console.log("喵喵

python开发函数进阶:命名空间,作用域,函数的本质,闭包,内置方法(globales)

一,命名空间 #局部命名空间#全局命名空间#内置命名空间 #三者的顺序#加载顺序 硬盘上--内存里#内置-->全局(从上到下顺序加载进来的)-->局部(调用的时候加载) 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #全局命名空间 5 a = 5 6 b = 8 7 #局部命名空间(函数) 8 def my_max(): 9 c = a if a > b else b 10 return c 11 m = my_max() 12 pr

lua --- 函数的本质

1.lua中的函数是带有此法界定的第一类值. 2.创建一个函数的过程,本质上就是一个创建赋值语句的过程. 常见的创建函数的过程: 1 function fun() 2 print("Hello world") 3 end 本质上是这样的一个过程: 1 fun = function () 2 print("Hello world") 3 end 3.以其他函数作为参数的函数,在lua中被称为高级高级函数 原文地址:https://www.cnblogs.com/lug

回调函数的本质,就是把函数当作参数(首先要定义函数类型)

//把一个方法当作另一个方法的参数, 就是回调方法, 大家习惯称作回调函数 type   TFunType = function(i: Integer): Integer; {声明一个方法类型} function MyFun(i: Integer): Integer;        {建立类型兼容的函数} begin   Result := i*2; end; {把函数当作参数, 再定义一个函数} function MyTest(x: Integer; F: TFunType): Integer

对于函数名本质的一点思考

自己在学习函数指针的时候对函数名的意义产生了一点疑惑,经过一些尝试和思考,感觉应该可以像下面这样理解,如果有啥不对的希望大家指正. 首先 我们对变量名的定义做一下回顾: 在C语言里面,我们声明一个变量的时候就会给这个变量名分配一个内存空间,也就是说变量名和内存空间相对应:同时每个内存空间都会有个地址. int a; a=5; 上面两句话说明了:变量a对应的内存空间存储了一个整型数5,并且我们还可以知道这个内存空间的地址是&a. 对于函数的调用我们一般是直接用函数名的,但是在汇编语言里面,调用函数

Callback函数详解(我感觉,回掉函数的本质是函数指针,在业务做循环处理的时候,调用一下通知外部)

2010年的最后一天了,转载一篇自己认为还不错的文章与大家分享.希望对大家有所帮助. 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢? 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数. 而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利

main函数的本质

1.main函数是操作系统调用的函数 2.操作系统总是将main函数作为应用程序的开始 3.操作系统将main函数的返回值作为程序的退出状态 main函数的参数 程序执行时可以向main函数传递参数 int main() int main(int argc) int main(int argc,char* argv[]) int main(int argc,char* argv[],char* env[]) argc--命令行参数个数 argv--命令行参数数组 env--环境变量数组 gcc编

函数名的本质

先来看一段函数 def alex(): prinr(123) def func()" return alex ret = func() print(ret()) 这段函数执行后的结果是这样的 123 None 这样就看结果得出来,函数名是可以当作变量使用的. 既然可以当作变量使用,那么它一定具备变量的部分特性,. 函数的本质 一,函数名是一个函数的内存地址 二,可以赋值,可以作为其他列表等容器类的元素. 三,可以作为函数的参数,返回值. 当然了,函数名的命名规则和变量名一样 一,以数字,字母,下