C语言第十回合:函数大揭秘

C语言第十回合:函数大揭秘

【学习目标】

1.       函数的定义

2.       函数的使用

3.       函数的声明

4.       形参和实参

5.       return语句

6.       函数的调用

函数:函数是包含一条或多条C语言的语句,完成程序中的部分功能的子程序。C源程序是由函数组成的。

A: 函数的分类

(一)  从函数的定义角度看:

(a)      库函数:由C系统提供,无需定义,如:printf,scanf,putchar…

(b)      用户定义函数:由用户定义的函数

(二)  C语言的函数兼有其他语言中的函数和过程两种功能:

(a)      有返回值的函数:此函数执行完任务后,向调用者返回函数值

(b)      无返回值的函数:此函数完成任务后,不会向调用者返回函数值

(三)  从主调函数和被调函数之间数据的传输:

(a)      有参函数:(即带参函数)在函数定义和声明时都有参数

(b)      无参函数:函数定义、函数说明及函数调用均都不带参数

B: 函数的定义

类型函数名称( 参数类表 ) { 声明 语句 }

(一)   无参函数的定义

类型标识符函数名()     //括号内没有参数

{

函数语句体;

return (表达式); //==  return表达式; 没返回值时,改为return;(即返回空)。

}

[ 1 ]无参无返回值得函数定义

//无参无返回值函数的定义
#include <stdio.h>

//无参无返回值函数的定义
//用void就表示无参数,可以不写,但是写比较规范,增强可读性
void print( void )
{
         int number= 100;

         printf("%d\n", number );

    return ; //不返回什么。可增强可读性
}

//main()函数也定义为无参函数
int main( void )
{

         //打印函数print中的number
         print();  //函数的调用

    return 0;
}

[ 2 ]无参又返回值函数的定义

//无参有返回值函数的定义
#include <stdio.h>

int Add( void )
{
         int a= 10;
         int b= 20;

         return ( a+ b );//返回表达式a+ b的值
}
int main( void )
{
         int sum;

         sum= Add();

         printf( "sum=%d\n", sum );

    return 0;
}

(二)   有参函数的定义:

类型标志符函数名(参数列表)

{

函数体语句;

return(表达式);//有返回值时,此句存在。没返回值时,为return; (即返回空)。

}

[ 1 ]有参无返回值函数

  //有参无返回值函数的定义
#include <stdio.h>

//有参无返回值的定义
void Add( int a, int b )
{
     int sum= 0;

     sum= a+ b;

     printf( "%d\n", sum );

     return ;
}

int main( void )
{
         int n= 20;
         int m= 30;

         printf( "n+ m=" );
         Add( n, m );

    return 0;
}

[ 2 ]有参有返回值函数

//有参有返回值函数的定义
#include <stdio.h>

//有参有返回值的定义
int Add( int a, int b )  //返回类型为int
{
     return ( a+ b );
}

int main( void )
{
         int sum= 0;
         int n= 20;
         int m= 30;

         sum= Add( n, m );

         printf( "n+ m=%d\n", sum );

    return 0;
}

C: 函数的申明

函数原型的声明就是告诉编译器预定函数名,作为以后在使用。(很像酒店的订餐,人没到先预定位置)

类型  函数名称( 参数类表 );  //这是声明,没有写函数的功能。

//函数申明
#include <stdio.h>

//有参有返回值的申明
//只声明了函数的原型,并没有定义功能
int Add( int a, int b );

int main( void )
{
         intsum= 0;
         intn= 20;
         intm= 30;

         sum=Add( n, m );

         printf("n+ m= %d\n", sum );

   return 0;
}

//有参有返回值的定义
int Add( int a, int b )  //返回类型为int
{
     return ( a+ b );
}

D:形式参数和实际参数

(一)   形式参数:形参出现在函数的定义中,整个函数都可以使用。

(二)   实际参数:实参出现在主函数(main)中,进入被调函数后,实参就不能使用了。

PS:发生函数调用时,主函数把实参的值传送给被调用函数的形参从而实现主调函数向被调函数传送数据。

特点:

(a)形参变量只有在被调用时才分配内存单元,结束后就会释放。所以形参的作用范围只有在函数内有效。

(b) 实参可以是常量、变量、表达式、函数等,无论实参是哪种类型,在进行函数调用时,他们必须有具体的值。

(c) 实参和形参在数量上、类型上、顺序上应严格一致,否则会发生“类型不配”的错误

(d) 函数调用中的数据传送时单向的。即只能把实参的值传送给形参,而不是把形参的值方向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

//形参和实参的讲解
#include<stdio.h>

//函数a和b都是形参
void Sub( inta, int b )  //减法
{
            int sub;

            sub= a- b;

            printf( "a- b= %d\n", a- b);

            return ; //Sub函数的结束标志
}

int main(void )
{
            int n, m;

            n= 30;
            m= 20;

            //Sub函数的调用
            Sub( n, m ); //n和m都是实参

    return 0;
}

E: return语句

关于return语句,前面也遇到很多,也解释了。这里再次说明一下。

格式: returnexpression;

不论有没有返回值,都写一下return语句。

有返回值时 return expression;

无返回时   return ; //虽不返回什么,但可以作为函数的结束标志。提高可读性

return语句实例

//[1]返回空
//print()函数的定义
void print( intnum ) //功能:打印整形num的值
{
         printf( "%d\n", num );

         return ; // 返回空。作用:增强可读性
}
//[2]返回值
//Add()函数的定义
int Add( int a,int b )
{
    int sum= 0;

         sum= a+ b;

         return sum;        //或使用return (a+ b ); //直接返回表达式的值
}

F: 函数调用

程序总是从main()函数开始执行,当程序遇到函数名时,这就是函被调用。

在函数被调用期间,实参与形参发生值传递。通过值传递的实参的值不会被调用函数中改变。

#include <stdio.h>

//定义sum函数,求 0- n之间所有数的和
int Sum( int n )
{
  intsum= 0;  //局部变量,函数sun调用完后sum就会被释放

  for(; n> 0; n-- ) //for语句,它里面前一个表达式被省略
  {
      sum+=n;  //sum= sum+ n;
  }

  returnsum;
}

int main( void )
{
  intnum= 10;

  printf("调用函数Sum前num= %d\n", num );
  printf("0-%d之间数的和:sum=%d\n",num, Sum( num ) );
  printf("调用函数Sum后num= %d\n", num );

   return 0;
}

【指尖的微笑】错误在所难免,希望得到大家的指正^-^

转载时保留原文的链接http://codingit.howbbs.com和http://blog.csdn.net/mirrorsbeyourself

时间: 2024-08-30 10:24:49

C语言第十回合:函数大揭秘的相关文章

等号操作符重载为什么不能用友元函数大揭秘,以及函数没有等到重载的时候赋值会出现什么现象(盲点)

先看下面程序结果输出什么? 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 private: 7 int x; 8 public: 9 A(){ 10 x=99; 11 cout<<"看看这里是否会被调用"<<endl; 12 } 13 }; 14 15 int main() 16 { 17 A a; 18 a = 7; 19 } 这里面,会报错,显示没有等号匹配现象.只有

C语言第十四回合:结构体大集合

C语言第十四回合:结构体大集合 [学习目标] 1.        结构体 2.        结构体数组 3.        结构体指针 结构体:是数据结构类型,把有内在联系的不同类型的数据统一成一个整体,使它们相互关联.是变量的集合,可以单独使用其的成员. A:结构体的定义 使用关键字:struct struct 结构体名 { 类型标识符  成员名1; 类型标识符  成员名2; -- };     //分号一定不能省 PS: (1)结构定义并不预留内存,结构体变量的定义才引起存储分配 (2) 

Swift语言指南(十)--字符串与字符

原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String 类型表示,对应着 Character 类型值的集合. Swift 中的 String 类型为你的编程提供了一个高速的,兼容 Unicode规范 的文本处理方式.Swift 创建和处理字符串的语法轻量可读,与 C 语言的字符串语法颇为相似.字符串的拼接非常简单,只需将两个字符串用 + 运算符相加.字符串的值是否

iOS学习笔记---c语言第十天

动态内存分配 一.存储区划分 从低到高(内存地址小----内存地址大)  :  代码区---常量区---静态区---堆区---栈区 栈内存 //凡是在函数体内定义的变量 都存储在栈区(包括形参). int a = 10;//a也是在栈区域里面 float b = 1.5;//b也是在栈区域里面 char c = 'b'; double d = 3.14; printf("%p %p %p %p\n",&a,&b,&c,&d); //栈的特点先进后出,先定

【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点.定位数据库可以不断完善不断补充,所以,越定位越准确.本文详细描述了,如果使用高德JS API来实现位置定位.城市定位的方法,包含了IP定位,浏览器定位,检索定位等多种网络定位方法.当然,如果您的手机有GPS功能,那么使用浏览器定位的时候,会自动获取GPS信息,使

C语言之字符串处理函数

C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为puts(字符串组) 作用:将一个字符串输出到终端.如,char一个string,并赋予初值.调用puts(string);进行字符串的输出. 2.gets函数——输入字符串的函数 一般的形式:gets(字符数组) 作用:从终端输入一个字符串到字符数组,并且得到一个函数值成为字符数组的起始地址. ge

字符编码乱码问题(servlet底层 编码大揭秘)

好多初学者会遇到,请求过去的信息内包含中文(一般会是get方式提交过去的请求会出现).好郁闷,这是为什么呢.有下面分析下,说的不好可以吐槽 话说我们能遇到这种编码的问题,归根结底就是这  这 web开发不是中国人开发的,中国文化博大精深,四大发明渊源流传,可惜,我们太自己为是了,来了个闭关锁国政策,弄得中国跟不上时代的步伐,不潮了,落伍了,互联网时代被西方人抢了个先,发明了,我们只能用别人的了.我们也知道,西方讲的是英语,所以他们采用的编码格式是iso-8895-1.而这  这种编码方式只占两个

我的新课--HTTPS全景大揭秘正在筹划中

在谷歌和苹果等公司的强力推动下,HTTPS的时代已经来临.为顺应时代趋势并响应学员的需求,广州八神 继<软件性能测试>.<快速上手Jmeter性能测试工具>后录制第3套课程<HTTPS全景大揭秘>.课程的目的只有一个,让学员一次性了解关于HTTPS的方方面面. 本套课程先从密码学的基础知识讲起,再带领大家回顾计算机网络从第一层到第七层需要掌握的知识.具备以上知识铺垫后,进入TLS和HTTPS的世界.同时针对HTTPS的应用.openssl命令.证书的生成和校验过程.性能

C语言实现当前日期时间函数NOW

作者:iamlaosong 写日志文件的时候需要记录当前日期和时间,C语言提供输出日期时间字符串的函数(分别是asctime和ctime),但格式不是我们喜欢的格式,国人自然喜欢中国的日期和时间格式,C语言不提供,我们就自己实现. 其实也很简单,无非是先取时间,再将时间转换为表达日期时间结构,用这个结构分量组成喜欢的格式即可.转换函数有gmtime和localtime,对应asctime和ctime分别表示格林威治时间和本地时间,在中国,这两个时间相差8小时. 下面是实现函数: /*国内习惯显示