黑马程序员技术交流社区

标题: C基础笔记-函数形参,返回值,调用过程 [打印本页]

作者: 长厢厮守℡    时间: 2015-12-6 13:35
标题: C基础笔记-函数形参,返回值,调用过程
一.函数的基本概念
函数:完成特定功能的代码块
函数作用:管理代码的
函数优点: 提高代码的可读性
       提高代码的可复用性
       提高代码的可维护性
注意点:函数名不可以重复定义
要给函数起一个有意义的名字
函数特点:只有调用才会执行。
函数可以封装代码块
二.定义函数
1.函数定义的格式
    返回值类型  函数名称(参数类型 参数名称,参数类型 参数名称,...){
          语句;
          ……
        return  xx;  
   }
2.如何定义一个函数
(1)根据函数的功能给函数起一个有意义的名字
(2)确定需不需要传入一些补助的值
(3)确定需要返回什么类型的数据给函数调用者
(4) 完成函数功能(写语句)
void :当函数没有返回值的时候,就将函数的返回值类型声明为 void
当函数返回值类型为void的时候,return可以省略
3.定义一个无形参无返回值的函数
    void printfname()
    {
       printf("my name is liyang\n");
    }

什么时候需要形参:当我们完成某个功能,有些数据我们不能确定,那么这时候就需要外界告诉我们
4.定义一个有形参无返回值的函数
      void printfManyNames(int nums)
      {
         for(int i=0;i
          printf("my name is liyang\n");
         }
      }
返回值类型:函数执行完毕之后返回什么类型的值给函数调用者
5.定义一个有形参有返回值的函数
       int sum(int num1,int num2)
       {
        return  num1+num2;
       }
6.定义一个有返回值无形参的函数
     double pi()
     {
return 3.1415926
  }
三.函数参数
形参:当定义函数的时候,函数名称后面小括号中的参数我们称为形式参数,简称形参
实参:当调用函数的时候,函数名称后面小括号中的参数我们称为实际参数,简称实参
注意点:1..实参与形参是一一对应的     
   
2.形参是什么类型的值,实参也必须传入什么类型的值
3.形参列表中不可以有同名的形参
4.在函数内部也不可以直接定义与形参同名变量
重点:基本数据类型作为函数参数传递的时候是值传递(仅仅是把实参的值赋给形参,改变形参的值,并不影响实参值).

#include <stdio.h>
// 定义一个求和的函数
int sum(int num1,int num2)
{
     num1 = 20;
     return num1+num2;
}
int main(int argc, const char *argv[]{
    int a = 10;
    int b = 11;
    //调用求和函数
    double rs = sum(a,b);
    printf("a=%d,rs=%d\n",a,rs);// a = 10   rs = 21
}
四.函数返回值
1.函数定义中声明是什么返回值类型,那么在主调函数中就必须使用相同变量接收
2.在C语言中没有函数重载的概念,它区分函数仅仅是根据函数名称,只要是名称相同就是重复定义,无论形参是否不同
3.什么样的返回值类型就必须返回什么类型的值,确保返回的值的类型与函数定义的返回值类型一致
4.如果函数定义中的返回值类型不为空,那么就必须返回一个值

五.自己的理解
return的作用
1.返回数据给函数调用
2.结束函数
函数的调用过程
实参的值赋给形参,在被调函数中完成功能,返回值给主调函数
1.函数内部不可以再定义其他函数
2.函数可以嵌套调用,在一个函数内部可以调用其他的函数,被调用的这个函数内部也可以调用其他函数
代码演示
本题思路是main函数调用average函数,average函数调用sum函数,返回值过程从上到下,调用过程从下到上

#include <stdio.h>
// 定义一个求和的函数
int sum(int num1,int num2)
{
     return num1+num2;
}
//定义一个求平均值的函数
int average(int num1,int num2)
{
    return sum(num1,num2)/2;
}
int main(int argc, const char *argv[]{
   int a = 10;
   int b = 20;
   int rs = average(10,20);
   printf(“rs=%d\n”,rs);
return 0 ;
}
函数声明
1.函数声明:就是把函数头拷贝到调用它的函数的前面
2.作用:告诉编译器这个函数已经存在了
注意点:
(1)一个完整函数包含2个部分:函数声明和函数定义
(2)无论是声明函数或者定义函数,如果不写返回值类型那么默认是int类型
(3)我们写代码的时候,必须带上返回值类型
(4)函数的声明与定义务必要保持一致,只要有函数声明即可编译成功,要有函数定义才能链接成功




作者: ZXY66452    时间: 2015-12-6 21:13
学习了谢谢分享
作者: zhuwenjia    时间: 2015-12-6 22:59
学习了,谢谢分享。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2