什么是函数?

函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值。

可以先想象成数学中的函数:

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)的更多相关文章

  1. 初始C语言中的数组(男神翁凯老师MOOC)

    定义数组 ●<类型>变量名称[元素数量]; ● int grades[100]; ●double weight[20]; ●元素数量必须是整数 ●C99之前:元素数量必须是编译时刻确定的字 ...

  2. C语言中的函数

    C语言中的函数 目录 概述——对函数的理解 C语言中函数的定义和声明 函数允许的参数类型 函数允许的返回类型 递归 概述 由于有些代码段在编写程序的时候经常会用到,此时我们为了减少代码文件的长度和增加 ...

  3. 想精度高,可以考虑用c语言中的函数gettimeofday

    大家好: 在 win32 + bcb 时, 有个 GetTickCount() 返回第统启动到现在的 tick, 单位 ms.请问在 Linux + qt5 怎样实现呢? 如果用 QDateTime ...

  4. C语言中的函数指针

    C语言中的函数指针 函数指针的概念:   函数指针是一个指向位于代码段的函数代码的指针. 函数指针的使用: #include<stdio.h> typedef struct (*fun_t ...

  5. 利用C语言中的函数指针实现c++中的虚函数

    C语言中的函数指针 #include<stdio.h> int fun1(int a) { return a*a; } int fun2(int a) { return a*a*a; } ...

  6. js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么

    js课程 3-10  js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...

  7. C语言中的函数与数学上的函数很类似

    函数,是C语言编程中一个很重要的概念,重要到个人认为可以与指针并驾齐驱.好多教材.老师.学习资源都会专门挑出一章来讲函数.我今天也来说说函数,只不过我是从数学课上的函数来引申到C语言中的函数. 先来说 ...

  8. 策略设计模式与c语言中的函数指针

    在C语言中有一个非常重要的概念-函数指针,其最重要的功能是实现回调函数(指函数先在某处注册,而它将在稍后某个需要的时候被调用)在java语言中没有指针的概念,但是可以利用接口和指针实现类似的功能,具体 ...

  9. 1、C语言中的函数指针

    一 通常的函数调用 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun ...

随机推荐

  1. json.loads()的字符串中为单引号引发的错误

    如下错误属于弱智错误,但是错的原因让我无语,所以记录一下 str2="{'card':6217001650004184441}"print(json.loads(str2)) Tr ...

  2. edis 以及 Python操作Redis

    Redis 以及 Python操作Redis   Redis Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis有以下特点: -- Redis支持数据的持 ...

  3. 安全测试6_Web安全工具第一节(浏览器入门及扩展)

    今天来学习下浏览器的功能,浏览器是我们经常用到但是功能却很强大的一个东东,我们经常用到的无非是三种(谷歌.火狐.IE) 1.浏览器功能介绍: 下面以谷歌浏览器(Chrome版本为56)为例,介绍下,懂 ...

  4. Javascript强制转换

    Javascript强制转换 Javascript强制转换强制转换一共有五种转换方式,各有各的用处,希望大家在实际的使用中灵活运用,不要死板. <!DOCTYPE html> <ht ...

  5. html调用html的方法

    html调用html的方法 html中引入调用另一个html的方法,尝试了好几种,都列出来: 其中第一种是最好的,其他的方法,可以尝试看看,是不是适合你当前项目 一.div+$(“#page1”).l ...

  6. error C2011: “timespec”:“struct”类型重定义

    error C2011: “timespec”:“struct”类型重定义 C++ pthread pthread.h 中的 timespec 和time.h 中的 结构定义重复了 ,同时两个头文件中 ...

  7. 7.adb安装

    adb的全称为Android Debug Bridge,中文名“调试桥”顾名思义adb命令是调试手机中应用的一种方法,而且作为Android SDK中的工具,其功能非常强大,用这个命令行工具可以直接操 ...

  8. iOS基础知识之属性及属性关键字

    iOS属性及属性关键字 一.属性功能:1.给现有的成员变量生成一对setter/getter方法.2.如果没有声明成员变量,自动声明一个_属性名的私有变量(默认的成员变量是受保护的). 二.属性关键字 ...

  9. winform 布局、容器

    一.布局 属性:1.Anchor:  绑定控件到容器边缘位置保持不变 注:四周全锁定时控件随界面变化时变大 2.Dock:绑定到容器的边缘 注:下控件到边需先将下控件定义到边再将左右控件新建.到边 3 ...

  10. Oracle事务隔离级别

    转自:https://blog.csdn.net/leozhou13/article/details/50449965