初识C语言中的函数(男神翁凯老师MOOC)
什么是函数?
函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值。
可以先想象成数学中的函数:
y=f(x)
例如 求begin到end和的函数定义
void sum(int begin, int end) // void 为返回类型(不返回任何东西) sum 为函数名 (int begin, int end)为参数表
)
{
int i;
int sum;
for(i=;i<=end;i++){
sum +=i;
}
printf("%d到%d的和是%d\n",begin, end, sum);
}
调用函数
函数名(参数表);
()起到了表示函数调用的重要作用,即使没有参数也要()
参数的值会被按照顺序依次用来初始化函数中的参数
从函数中返回值(单一出口)
int max (int a , int b)
{
int ret;
if(a>b){
ret=a;
}
else{
ret=b;
}
return ret;
}
●return停止函数的执行,并送回一个值
●return;
●return 表达式;
●可以赋值给变量(c=max(a,b);)
●可以再传递给函数(●●●printf("%d\n", max(a,b));)
●甚至可以丢弃返回值
没有返回值的函数
● void 函数名(参数表)
●不能使用带值的return
●可以没有return
●调用的时候不能返回值的赋值
函数先后关系
void sum(int begin, int end)
{
int i;
int sum=;
for(i=begin;i<=end;i++){ //像这样把sum()写在上面,是因为:C的编译器自上而下顺序分析你的代码
sum +=i;
}
printf("%d到%d的和是%d\n",begin,end,sum);
}
int main()
{
sum(,);
sum(,);
sum(,); return ;
}
void sum(int begin, int end);//函数的原型声明,原型里可以不写参数的名字,但是一般仍然写上
int main()
{
sum(,);
sum(,);
sum(,); return ;
} void sum(int begin, int end)
{
int i;
int sum=;
for(i=begin;i<=end;i++){
sum +=i;
}
printf("%d到%d的和是%d\n",begin,end,sum);
}
调用函数
●如果函数有参数,调用函数时必须传递给它数量 类型正确的值
●可以传递给函数的值是表达式的结果,这包括
● 字面量 【c=max(10,12);】
●变量 【c=max(a,b);】
●函数的返回值 【c=max(max(23,45), a);】
●计算的结果 【c=max(23+45,b);】
类型不匹配?
● 调用函数时给的值与参数的不匹配时C语言传统上最大的漏洞
● 编译器总是悄悄替你把类型转换好,但是这很可能不是你所期望的
● 后续的语言,C++/Java 在这方面很严格
传过去的到底是什么?
void swap(int a, int b);
int main()
{
int a=;
int b=;
swap(a,b);
printf("a=%d b=%d\n",a,b); ● 这样的代码能交换a和b的值吗?
return ;
}
void swap(int a, int b)
{
int temp =a;
a=b;
b=temp;
}
C语言在调用函数时,永远只能传值给函数
●每个函数都有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系
本地变量
●函数的每一次运行,就产生一个独立的变量空间,在这个空间中的变量,就是函数所独有的,称为本地变量
●定义在函数内部的就是本地变量
●参数也是本地变量
●对于本地变量,生存期和作用域 大括号内———块(函数的块内 语句的块内)
●程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了
●块外面定义的变量在里面仍然有效
●块里面定义了和外面同名的变量则掩盖了外面的
●不能再一个块内定义同名的变量
●本地变量不会被默认初始化
没有参数时
(void)
逗号运算符
● 调用函数时的圆括号里的逗号时标点符号,不是运算符
f(a,b)
f((a,b))
●C语言不允许函数的嵌套定义

初识C语言中的函数(男神翁凯老师MOOC)的更多相关文章
- 初始C语言中的数组(男神翁凯老师MOOC)
定义数组 ●<类型>变量名称[元素数量]; ● int grades[100]; ●double weight[20]; ●元素数量必须是整数 ●C99之前:元素数量必须是编译时刻确定的字 ...
- C语言中的函数
C语言中的函数 目录 概述——对函数的理解 C语言中函数的定义和声明 函数允许的参数类型 函数允许的返回类型 递归 概述 由于有些代码段在编写程序的时候经常会用到,此时我们为了减少代码文件的长度和增加 ...
- 想精度高,可以考虑用c语言中的函数gettimeofday
大家好: 在 win32 + bcb 时, 有个 GetTickCount() 返回第统启动到现在的 tick, 单位 ms.请问在 Linux + qt5 怎样实现呢? 如果用 QDateTime ...
- C语言中的函数指针
C语言中的函数指针 函数指针的概念: 函数指针是一个指向位于代码段的函数代码的指针. 函数指针的使用: #include<stdio.h> typedef struct (*fun_t ...
- 利用C语言中的函数指针实现c++中的虚函数
C语言中的函数指针 #include<stdio.h> int fun1(int a) { return a*a; } int fun2(int a) { return a*a*a; } ...
- js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么
js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...
- C语言中的函数与数学上的函数很类似
函数,是C语言编程中一个很重要的概念,重要到个人认为可以与指针并驾齐驱.好多教材.老师.学习资源都会专门挑出一章来讲函数.我今天也来说说函数,只不过我是从数学课上的函数来引申到C语言中的函数. 先来说 ...
- 策略设计模式与c语言中的函数指针
在C语言中有一个非常重要的概念-函数指针,其最重要的功能是实现回调函数(指函数先在某处注册,而它将在稍后某个需要的时候被调用)在java语言中没有指针的概念,但是可以利用接口和指针实现类似的功能,具体 ...
- 1、C语言中的函数指针
一 通常的函数调用 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun ...
随机推荐
- tomcat安全加固和规范
tomcat是一个开源Web服务器,基于Tomcat的Web运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐.不过,在默认配置下其存在一定的安全隐患,可被恶意攻击.以下是一些安全 ...
- linux:Apache服务器相关
安装apache服务器 (推荐方法) 安装前清确保已安装gcc.g++ 1)安装依赖包apr-1.6.5.tar.gz,下载地址:http://apr.apache.org/download.cgi ...
- JS中 == ,===, !=, !==的区别
一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false. === 判断规则 如果类型不同,就[不相等] 如果两个都是数值,并且是同一个值,那么[相等]:(!例外 ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
- unicode转中文以及str形态的unicode转中文
今天在工作中遇到这样一个问题(工作环境为Python2.7.1),需要将一个字典中字符串形态的Unicode类型的汉字转换成中文,随便总结一下: 1.unicode转中文 old = u'\u4e2d ...
- [Unity插件]Lua行为树(九):条件节点调整
先看一下之前的条件节点是怎么设计的: BTConditional.lua BTConditional = BTTask:New(); local this = BTConditional; this. ...
- python 插入html到数据库 re.escape() PyMysql
python 把html 网页源码插入到mysql 成功,部分汉字乱码是 mysql编码问题
- 30.Scrapy 对接 Selenium
Scrapy 对接 Selenium(参考代码网址,https://github.com/Python3WebSpider/ScrapySeleniumTest) 此文就是参考书上的代码拿下来跑,作为 ...
- C# 实现保留两位小数的方法
1.Math.Round(0.333333,2);//按照四舍五入的国际标准 2.double dbdata=0.335333; string str1=String.Format("{0: ...
- Web.xml 中 metadata-complete 介绍
Servlet 3.0 的部署描述文件 web.xml 的顶层标签 <web-app> 有一个 metadata-complete 属性, 该属性指定当前的部署描述文件是否是完全的. 如果 ...