函数是什么及怎么定义、怎么使用

来源:互联网 发布: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在函数中不可返回局部变量,因为局部变量存放在栈中,函数返回该内存空间就会被销毁,通常是这样,不过现在的编译器好像做了优化还是怎么地,局部变量也是可以返回的。

相关函数部分先说这么多,有问题再补充。

碎觉。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 刚开的淘宝店没有生意怎么办 房产代理公司不给渠道结佣金怎么办 天猫超过72小时不发货怎么办 流量魔盒苹果下载怎么打不开怎么办 淘宝包邮店铺新疆地区拍怎么办 淘宝客服当顾客要优惠时怎么办 微信手机号注册的找不到了怎么办 之前注册的微信找不到了怎么办 苹果ipad的id密码忘了怎么办 淘宝和支付宝用一张银行卡怎么办 淘宝卖家填写虚假物流信息怎么办 淘宝店铺的浏览量越来越少怎么办 网上充手机话费充错了怎么办 夜神模拟器上陌陌的位置不对怎么办 如果在大庭广众之下放了个屁怎么办 淘宝分销上传宝贝被系统下架怎么办 酷狗喜欢歌单里面的歌都没了怎么办 苹果手机下载不了微信缓冲怎么办 登陆微信提示版本过低登不了怎么办 苹果手机微信版本过低登不上怎么办 微信小程序显示微信版本过低怎么办 三星手机登微信显示版本过低怎么办 微信版本低无法登录无法升级怎么办 手机淘宝五应用界面无法打开怎么办 入住淘宝主播没有微博粉丝怎么办 手机淘宝领金币怎么没有了怎么办 淘宝荬家缺货对付款买家怎么办 淘宝买家确认收货后申请退款怎么办 淘宝东西失效了但付过款了怎么办 淘宝图片被投诉盗图怎么办原图没了 淘宝退款申请不小心撤销了怎么办 淘宝不小心点了撤销退款怎么办 淘宝上退款不小心撤销了怎么办 新店淘宝卖家想开通直播怎么办 想开通淘宝直播却没有粉丝怎么办 淘宝店家拒绝给我改地址怎么办0 淘宝被投诉卖假申诉失败怎么办 要退保证金但是有人买东西了怎么办 手机淘宝上我是商家停止服务怎么办 淘宝上买的电脑商家关闭了怎么办 淘宝链接复制链链接发不出去怎么办