第五章:函数

5.1函数的介绍

5.1.1 函数的概述

函数是 c 语言的功能单位,实现一个功能可以封装一个函数来实现。
定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值
  需要传哪些数据给函数?(实参)
  函数的功能代码(函数体)如何实现?
  函数需要返回啥类型的数据?(函数的返回值类型)

5.1.2 函数的分类(定义角度)

库函数( c++ 语言库)、自定义函数、系统调用(内核提供给用户的函数接口)

5.1.3 函数的分类(有无参数)

无参的函数:不能将函数外部的数据 传递 给函数内部
有参的函数:通过参数 将函数外部的数据 传递到函数内部
(参数:函数外部数据 到 函数内部的 桥梁)

5.2 函数定义、声明、调用

5.2.1 函数的定义

//函数的定义 定义处x y叫形参 (函数定义的时候 形参不会开辟空间)
//只有当函数调用的时候 才会为形参 开辟空间 保存实参的值
int my_add(int x, int y) //x = data1, y=data2
{
  //return 返回函数运算结果 结束当前函数
  return x + y;
}

5.2.2 函数声明

一般先调用函数 后定义函数 需要提前函数声明。
函数声明:告知编译器 该函数的函数名是啥 有几个形参 返回值类型是啥
/函数声明 告知编译器 如果遇到函数名为my_add,有两个int形参,以及一个int返回值类型
//请通过编译
//int my_add(int, int);//ok 不推荐
int my_add(int x, int y);

5.2.3 函数的调用

执行函数体,一般调用格式是:函数名 ( 实参 )
#include<iostream>
using namepace std;
//函数声明 告知编译器 如果遇到函数名为my_add,有两个int形参,以及一个int返回值类型
//请通过编译
//int my_add(int, int);//ok 不推荐
int my_add(int x, int y);
int main(int argc, char *argv)
{
  int data1 = 10;
  int data2 = 20;
  //函数的调用 data1,data2实参
  int ret = 0;
  ret = my_add(data1, data2);
  cout<<"结果为:"<<ret<<endl;
}
//函数的定义 定义处x y叫形参
int my_add(int x, int y) //x = data1, y=data2
{
  //return 返回函数运算结果 结束当前函数
  return x + y;
}

6.3 函数的调用过程

 大量调用函数 会发生出入栈的开销

5.4 函数的传参

5.4.1 普通变量作为函数的参数

函数内部 需要使用外部变量的值 需要将外部变量的 值传递 给函数内部。这时 普通变量 就要作为函数的形参 (单向传递之值传递)

 

5.4.2 数组作为函数的参数

1 、数值数组作为函数的参数
函数内部 可以 操作(读写) 外部数组的元素。
#include <iostream>
using namespace std;
void inputIntArray(int arr[], int n );
void sortIntArray(int arr[], int n);
void printIntArray(int arr[], int n);
int main()
{
  int arr[5]={0};
  int n = sizeof(arr)/sizeof(arr[0]);
  //获取键盘输入
  inputIntArray(arr, n);
  //对数组排序
  sortIntArray(arr, n);
  //对数组遍历
  printIntArray(arr, n);
}
void printIntArray(int arr[], int n)
{
  int i=0;
  for(i=0;i<n;i++)
  {
    cout<<arr[i]<<" ";
  }
  cout<<endl;
}
void sortIntArray(int arr[], int n)
{
  int i=0;
  for(i=0;i<n-1;i++)
  {
     int j=0;
     for(j=0;j<n-i-1;j++)
  {
  if(arr[j]>arr[j+1])
  {
    int tmp = arr[j];
    arr[j] = arr[j+1];
    arr[j+1] = tmp;
  }
}
  }
  return;
}
void inputIntArray(int arr[], int n )
{
  cout<<"请输入"<<n<<"个int数据:";
  int i=0;
  for(i=0;i<n;i++)
  {
    cin>>arr[i];
  }
 return;
}
2 、字符数组作为函数的参数
#include <iostream>
using namespace std;
void myGetString(char str[], int n);
int myStrlen(char str[]);
int main()
{
  char str[128]="";
  //键盘获取字符串
  myGetString(str, sizeof(str));
  //测量字符串的长度
  cout<<"长度:"<<myStrlen(str)<<endl;;
}
int myStrlen(char str[])
{
  int i=0;
  while(str[i] != '\0')
  i++;
  return i;
}
void myGetString(char str[], int n)
{
  cout<<"请输入一个字符串:";
  cin.getline(str, n);
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值