【零基础学习iOS开发】【02-C语言】10-函数

一、基本概念

1.什么是函数

不论什么一个C语言程序都是由一个或者多个程序段(小程序)构成的。每一个程序段都有自己的功能,我们一般称这些程序段为“函数”。

所以。你能够说C语言程序是由函数构成的。

比方你用C语言编写了一个MP3播放器程序。那么它的程序结构例如以下图所看到的:

  • 从上图能够看出:函数就是用来实现某个功能的程序段,每个函数都有自己的功能。因此,你应该把实现某个功能所需的代码都写在函数中。

    比方。有个函数的功能是播放MP3。那么播放MP3的代码都应该写到这个函数中。
  • 当调用(运行)一个函数时,计算机就会按顺序运行函数中的全部代码,从而展示函数所实现的功能。

2.函数名

一般来说。我们会将不同的功能交给不同的函数去实现。比方,将暂停播放MP3的代码写到一个函数中。将停止播放MP3的代码写到还有一个函数中。因此。一个C程序中可能会有非常多的函数。

为了方便调用和区分这些函数,我们须要为每个函数都起一个唯一的名称,函数的命名必须依照标识符命名规则。

利用函数名就能够调用到相应的函数。

回到顶部

二、函数的定义

1.不论什么一个函数在使用之前都必须进行定义

定义函数的目的就是为了写清楚你这个函数是干啥用的,里面包括了哪些代码。函数的定义格式例如以下:

1 返回值类型  函数名(形式參数列表)
2 {
3     函数体
4 }

2.举例

比方定义一个函数用来计算两个整数的和。

那么能够写成以下这样:

 1 #include <stdio.h>
 2
 3 int sum(int a, int b)
 4 {
 5     int c = a + b;
 6     return c;
 7 }
 8
 9 int main()
10 {
11     int d = sum(10, 11);
12
13     printf("d is %d", d);
14     return 0;
15 }

  • 分别在第3行、第9行定义了sum函数、main函数,当中sum函数的作用是计算两个整数的和。
  • 函数定义好后,并不会立即运行函数内部的代码。要有人调用它才会运行内部的代码。就好像你的手机尽管有打电话的功能,可是仅仅有按了拨号键,才会运行打电话的功能。
  • 程序运行时就会先调用main函数,按顺序运行第11~14行代码,由于main函数是程序的入口
  • 第11行的sum(10, 11)是调用sum函数,sum函数被调用了,就会分配存储空间给形式參数列表中的全部參数,也就是第3行中的变量a和变量b。它们都是“形式參数”
  • 第11行中的10、11称为“实际參数”。它们将分别赋值给变量a、变量b,也就是相当于
1 int a = 10;
2 int b = 11;
  • 既然调用了sum函数。就会按顺序运行sum函数中的代码,也就是第5~6行代码。
  • 第5行将a+b的值21赋值给了变量c,第6行使用returnkeyword将变量c返回给了函数调用者,也是说,第11行sum(10, 11)的值是21。那么变量d的值就是21。
  • 第13行的输出结果为:
d is 21
  • 第3~7行中的变量a、b、c都仅仅有在调用sum函数时,才会分配存储空间。当sum函数运行完成后,变量a、b、c就会被释放存储空间。因此,它们的作用域仅限于sum函数内部。
  • 第3行sum左边的int称为“返回值类型”,第6行returnkeyword后面跟着的数值称为“返回值”。因此第6行的变量c就是返回值。返回值的数据类型应该跟“返回值类型”保持一致。

回到顶部

三、形式參数和实际參数

1.基本概念

1> 形式參数:在定义函数时,函数名后面的小括号()中定义的变量称为形式參数。简称形參

2> 实际參数:在调用函数时传入的值称为实际參数,简称实參

2.调用函数时传递的实參个数 必须和 函数的形參个数必须保持一致

 1 int sum(int a, int b, int c)
 2 {
 3     return a + b + c;
 4 }
 5
 6 int main()
 7 {
 8     sum(10, 9, 7);
 9     return 0;
10 }

第1行中sum函数中有3个形參,因此在第8行调用sum函数时,须要传入3个实參

3.当使用基本数据类型(char、int、float等)作为实參时。实參和形參之间仅仅是值传递。改动形參的值并不影响到实參

 1 #include <stdio.h>
 2
 3 int test(char a)
 4 {
 5     a = 10;
 6
 7     return 0;
 8 }
 9
10 int main()
11 {
12     char b = 5;
13
14     test(b);
15
16     printf("b的值是%d", b);
17
18     return 0;
19 }

  • 在第3行定义了test函数,仅仅有一个形參a
  • 在第14行调用了test函数。接着就会分配内存给变量a。这里将变量b当做实參。那么变量b的值将传递给变量a。这个时候,内存中大致例如以下图所看到的:

(事实上在内存中存储的是二进制数据。这里我写成10进制是为了直观性)

  • 运行完第5行代码后,变量a的值变成了10,可是变量b的值依旧是5

  • 第16行代码的输出结果是:
b的值是5

因此,在函数内部改动了形參的值,并不会影响到外面的实參。

4.函数能够没有形參

定义一个函数时是能够没有形參的。比方以下的函数

 1 #include <stdio.h>
 2
 3 int test()
 4 {
 5     printf("调用了test函数");
 6     return 0;
 7 }
 8
 9 int main()
10 {
11     test();
12     return 0;
13 }

  • 在第3行定义了test函数,能够发现,它的形參列表是空的,也就是没有形參
  • 那么在第11行调用test函数时,就不用传递不论什么实參
  • 事实上。第9行定义的main函数也是没有形參的

回到顶部

四、返回值类型

1.返回值就是函数调用完后,返回给函数调用者的结果。用returnkeyword进行返回。

定义函数时,要指明函数的返回值类型

 1 double pi()
 2 {
 3     return 3.4;
 4 }
 5
 6 int main()
 7 {
 8     double a = pi();
 9     return 0;
10 }

  • 第1行定义了一个pi函数,返回值类型是double,因此用return返回的数值应该是double类型的。这里返回的是3.14
  • 第8行pi函数调用完成后。函数调用者得到的值就是3.14,因此,变量a的值是3.14

2.一个函数能够没有返回值,假设没有返回值,应该用void表示返回值类型

 1 #include <stdio.h>
 2
 3 void test()
 4 {
 5     printf("调用了test函数");
 6     return;
 7 }
 8
 9 int main()
10 {
11     test();
12     return 0;
13 }

  • 在第3行定义了一个test函数,它是没有返回值的。所以第6行的return后面没有跟上不论什么数值
  • 在第11行调用了test函数

3.假设一个函数没有返回值,最后面的return语句能够省略

所以。上面的test函数能够简化成:

1 void test()
2 {
3     printf("调用了test函数");
4 }

4.假设一个函数没有明白写出返回值类型,那么代表这个函数的返回值类型是int

1 sum(int a, int b)
2 {
3     return a + b;
4 }

能够看到,第1行定义的sum函数没有明白写出返回值类型。那么这个sum函数的返回值类型就是int。因此。第3行return后面尾随的是int类型数据

回到顶部

五、return

1.return语句能够在函数内部返回一个值给函数调用者

 1 int sum(int a, int b)
 2 {
 3     return a + b;
 4 }
 5
 6 int main()
 7 {
 8     int c = sum(5, 8);
 9     return 0;
10 }

第3行使用了return语句,将a+b的值返回给了函数调用者,因此第8行变量c的值是13

2.一个函数内部能够多次使用return语句,使用了return语句后。函数就会立即停止运行。return语句后面的代码就不再被运行

1 int max(int a, int b)
2 {
3     if (a>b)
4     {
5         return a;
6     }
7
8     return b;
9 }

  • 这个max函数能够用来求出两个整数中的最大值
  • 假设a大于b,就运行第5行代码。直接将a返回,函数就会停止运行。

    也就是说,后面的第8行代码就不会被运行
  • 假设a不大于b,就运行第8行代码,将b返回

回到顶部

六、函数定义的注意

1.函数名不能反复

默认情况下。函数的名字必须唯一。以下的写法是错误的:

1 void test(int a)
2 {
3
4 }
5
6 int test()
7 {
8     return 10;
9 }

第1、6行定义的函数的名称都是test,编译器会直接报错

2.每个函数都应该独立定义。不能嵌套定义

以下的写法是错误的:

1 int main()
2 {
3     void test()
4     {
5
6     }
7
8     return 0;
9 }

在第3行把test函数定义在了main函数内部。这是错误的写法

回到顶部

七、常见函数

1.main函数

第一个C语言程序開始。就认识了这个main函数。main函数是整个C程序的入口,有了main函数,C程序才干执行成功,并且整个C程序中仅仅能有一个main函数。

main函数的简单定义例如以下:

1 int main()
2 {
3
4     return 0;
5 }

它能够没有形式參数,返回值是int类型。它的返回值用于说明程序的退出状态:假设返回0,则代表程序正常退出,否则代表程序异常退出

2.printf函数

你可能已经注意到。平时一直在使用的printf事实上也是一个函数,这是系统自带的函数

1 #include <stdio.h>
2
3 int main()
4 {
5
6     printf("我要学习iOS开发");
7
8     return 0;
9 }

  • 在第6行调用了printf函数。传入的參数是一个字符串常量:"我要学习iOS开发"
  • printf函数的作用是在屏幕上输出内容
  • 注意第1行代码,假设你使用了printf函数,就要加上这一句,至于原因,会在后面的章节具体介绍
时间: 2024-08-13 08:11:42

【零基础学习iOS开发】【02-C语言】10-函数的相关文章

李洪强iOS开发之零基础学习iOS开发【02-C语言】03-关键字、标识符、注释

上一讲中已经创建了第一个C语言程序,知道了C程序是由函数构成的,这讲继续学习C语言的一些基本语法.C语言属于一门高级语言,其实,所有的高级语言的基本语法组成部分都是一样的,只是表现形式不太一样.就好像亚洲人和非洲人,大家都有人类的结构:2只手.2只脚.1个头,只是他们外表不太一样,比如肤色.脸型.因此,你掌握好了一门高级语言,再去学习其他高级语言,那是相当快的.而且,很多其他高级语言,比如后面要学习的Objective-C,都是基于C语言.从C语言衍生出来的,好好学习C语言吧,绝对不吃亏. 一.

【零基础学习iOS开发】【01-前言】01-开篇

本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂.若遇到不明白的地方或者对此文有异议,望及时评论. 回到顶部 一.什么是iOS 要想学习iOS开发,首先要搞清楚什么是iOS.iOS其实是一款操作系统,就像平时我们在电脑上用的

零基础学习IOS开发(二)- 使用cocos2d-x3.0 执行Hello world

关于开发框架,依据网上检索来的信息,感觉cocos2d-x的ios游戏开发框架非常不错,并且有非常强的可移植性,因此打算尝试一下. 截止写下此文章,最新的cocos2d-x的版本号为v3.0稳定版(几天前刚刚公布),下载地址为:http://www.cocos2d-x.org/filedown/cocos2d-x-3.0-cn 安装方式例如以下: 1.解压程序压缩包(所在路径不能有中文哦,由于是python,你懂的...) 2.sudo python setup.py 安装cocos2d-x,依

零基础学习iOS开发去哪里比较好呢?

很多人选择零基础学习iOS开发,但不知道如何学习更加省力,要知道,C语言是iOS的编程基础,打牢C语言基础至关重要,传智播客iOS培训机构作为行业最具权威的iOS研发和人才培训中心,是教育部教育信息管理中心认证的全国移动互联网开发人才实训基地,专业的教学培养大批高技能iOS开发者,传智播客注重基础教学,从C语言开发学习到进入下一阶段的学习,需经过严格的进阶制考核,以保证有足够的能力接受iOS应用开发技能.      C语言是iOS的基础,学好C语言对iOS应用开发和iOS手游开发都起着重要作用,

【零基础学习iOS开发】【转载】

原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂.若遇到不明白的地方或者对此文有异议,望及时

李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇

从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂.若遇到不明白的地方或者对此文有异议,望及时评论. 一.什么是iOS 要想学习iOS开发,首先要搞清楚什么是iOS.iOS其实是一款操作系统,就像平时我们在电脑上用的XP.Win7,都是操作系统. 那什么是操作系统呢?操作系统其实是一种软件,是直接运行在硬件(电脑.手机等)上的最基本的系统软件,任何

李洪强iOS开发之【零基础学习iOS开发】【02-C语言】02-第一个C语言程序

前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算机.手机等硬件设备)进行交互.由于我们的最终目的是学习iOS开发,学习iOS开发的话必须在Mac系统下,因此我就在Mac系统环境下开发C语言程序,而不是在Windows环境下. 接下来,就在Mac系统环境下编写第一个C语言程序,最后把程序运行起来,跟计算机做一个小小的互动 一.编写第一个C语言程序-

【零基础学习iOS开发】【02-C语言】02-第一个C语言程序

本文目录 前言 一.编写第一个C语言程序-Hello World 二.编译程序 三.链接程序 四.运行程序 五.总结 六.学习建议 七.clang指令汇总 回到顶部 前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算机.手机等硬件设备)进行交互.由于我们的最终目的是学习iOS开发,学习iOS开发的话必须在Mac系统下,因此我就在Mac系统环境下开发

【零基础学习iOS开发】【02-C语言】01-概述

本文目录 一.计算机常识 二.程序设计语言发展史 三.C语言简史 四.C语言的特点 五.C语言的作用 六.C语言的版本问题 前面已经给大家介绍了iOS开发相关的一些基础知识,比如学习iOS开发需要什么准备.iOS开发的前景等等.在<开篇>这讲中说过:其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言.iOS开发需要学习的主要程序设计语言有:C语言.C++.Objective-C,其中C++.Objective-C都是以C语言为基础,从C语言衍生出来

【转】零基础学习iOS开发【2015-09-06 23:03】

原文链接:http://www.cnblogs.com/mjios/archive/2013/04/27/3046049.html#label5 本文目录 一.程序设计语言 二.是否需要计算机专业知识 三.是否要英文很好 四.开发工具 五.开发环境 六.Mac OS X的获取途径 七.调试设备 八.开发者证书 九.总结 在上一讲中,介绍了什么是iOS开发.说简单一点,iOS开发,就是开发运行在iPhone或者iPad上的软件.这么一说完,应该有很多人就会产生一些疑惑,比如学习iOS开发是不是一定