函数是什么及怎么定义、怎么使用
来源:互联网 发布:js格式化日期补0 编辑:程序博客网 时间:2024/06/10 05:03
原博客地址:http://www.codertown.cn/blog/?p=141
函数相关,比如编译之后是什么,函数名的表,定义函数,涉及到return、形参、实参等等,什么是参数
一、函数使用方法
什么是函数,可自行百度百科可得到原始的定义,其实就是一个数函另一个数,简称函数。简单的理解就是一个数通过一个算式得到另外的数。
比如y = x + 4; x和y的关系式不变,给一个x就能得到一个y。
先来看下编程中的函数是怎样的。
int function(int x)
{
return x + 4;
}
这是一个简单的函数定义,就好比我们给了你一个式子,或者一串代码,你只要根据传入的x,就能得到一个y;定义了怎么使用呢?
下面是一段代码:
//example 1
#include
int function(int x)
{
return x + 4;
}
int main(int argc, char *argv[])
{
int a = 5, b;
b = function(a);
printf(“b = %d\n”, b);
return 0;
}
通过这段代码,在linux终端下,执行gcc main.c即可生成在该平台下可用的可执行程序a.out。
数学中,我们需要一个固定的式子,用人脑计算结果,但是在计算机的世界里,CPU帮我们把事情给做了,你只需要找到方法怎么去做这件事就好。
main本身也是一个函数,只不过它是程序的入口,所以没提到多少,其实它也会被调用,而且要有返回值。
1、函数定义的各个方面
在function为名字的函数定义中,前面的int表示返回值类型,括号中的int x表示形参,return关键字就是表示把这个值返回。
2、函数调用
这里带有返回值,所以我们需要用一个变量将返回值存储以备调用;还要给函数名后面括号中放一个实际的值,可以是变量也可以是常量,这里直接放的是a, a就是实参(具体的,实际上的参数),相当于代入a,通过算式function算出b的值;
3、函数的声明
一般情况下,如果在一个代码文件中,函数的定义写在调用函数之前,则可以省去声明;而如果写在调用后面,则需要先声明再调用。比如下代码:
//example 2
#include
int function(int x);
int main(int argc, char *argv[])
{
int a = 5, b;
b = function(a);
printf(“b = %d\n”, b);
return 0;
}
int function(int x)
{
return x + 4;
}
前面写的function只是声明下,告诉下面要用的代码,我这有定义呢,别乱用。
二、深入理解函数
程序中的变量,函数都是有相应的内存地址的,在编译链接完成之后就会给其分配内存地址,生成的二进制文件都是用地址和指令表示的。
所以,上述例子中,a,b,x,y,function,main等都是有其内存地址的,只不过通常情况下,我们并不关心具体地址是多少。
在一个函数中,形参是在定义函数的时候括号中的变量,可以有多个,用逗号分开。在程序运行的时候,这些变量是存放在栈中的,也就是临时变量区,每个函数都有自己的栈区,用来存放局部变量(包括形参和该函数用大括号括起来的代码中的变量),存放顺序是最右边的存放在高地址部分,最左边的存放在低地址,所以入栈顺序为从右到左。我们可以用一段测试代码打印出地址即可知道:
void function(int x, int y, int z)
{
printf(“&x = 0x%x\n”, &x);
printf(“&y = 0x%y\n”, &y);
printf(“&z = 0x%z\n”, &z);
}
通过调用该函数,执行后可在屏幕打印显示x,y,z的地址即可验证。
还有一个问题,在执行程序的时候怎么知道程序的地址:
在C程序编译完成后,会生成一个函数符号表,该表中一个函数名对应一个地址,汇编中也就是一个标号对应一个地址。
此时,程序运行时则可知道该到哪里去执行接下来的代码块。
对于return,一般说,return在函数中不可返回局部变量,因为局部变量存放在栈中,函数返回该内存空间就会被销毁,通常是这样,不过现在的编译器好像做了优化还是怎么地,局部变量也是可以返回的。
相关函数部分先说这么多,有问题再补充。
碎觉。
- 函数是什么及怎么定义、怎么使用
- bower 是什么,怎么使用
- DUBBO是什么?怎么配置使用?
- UpdateData()函数怎么使用
- java中collection是什么?怎么理解?怎么使用?
- Mysql中的事物是什么?怎么使用?
- String.prototype是什么以及怎么使用
- 小技巧 怎么查看函数定义
- 定义函数怎么加换行符
- 什么是PDO及怎么使用
- VC: UpdateData()函数怎么使用
- 怎么使用Android隐藏函数
- 怎么使用EL调用函数
- RowMapper是什么?怎么用?
- grep是什么?怎么用?
- grep是什么?怎么用?
- Jsoup|是什么?怎么用?
- Kotlin是什么,怎么用
- Sqlmap渗透
- struct和strlen的相关问题总结--个人盲点的分析及理解
- Sicily 1259. Sum of Consecutive Primes
- linux创建文件树,孩子兄弟树(或广义表),创建文件树及其访问
- 20411015日 学习JAVA的第二天
- 函数是什么及怎么定义、怎么使用
- 关于python语言使用redis时,连接是否需要关闭的问题
- linux驱动模块编译(初学者)
- 对于int $0x80引发的问题
- 每天一个小算法(Heapsort)
- Java程序员的JavaScript学习笔记(3——this/call/apply)
- HPUX平台常用命令列举
- 栈的应用-中缀表达式求值
- 《Windows内核原理与实现》第三章学习笔记---KPROCESS学习