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 普通变量作为函数的参数
函数内部 需要使用外部变量的值
需要将外部变量的 值传递 给函数内部。这时 普通变量 就要作为函数的形参
(单向传递之值传递)
![](https://img-blog.csdnimg.cn/direct/1b4eb06e7d964a3dbbb775b39615548e.png)
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);
}