函数
目录
基础
函数:是一个命名的代码块,可以被调用执行相应的代码,完成一定的功能
函数定义:
返回类型 函数名(参数列表)
{
//函数体
}
4种形态:
有返回值函数 无返回值函数 有参数的函数 无参数的函数
……
double cube(double x);//function prototype
……
Int main()
{
……
double q=cube(1.2);// function call
……
}
double cube(double x) //function definition
{
return x*x*x;
}
函数调用: 函数名(实参列表);
函数调用完成的工作
实参初始化函数对应形参 转移控制权给被调函数
函数原型:
形式:
复制函数定义中的函数头,添加分号 可以省略形参的名字
作用:
描述了函数的接口,说明了调用函数所需的全部信息;告诉编译器函数的类型 库函数的声明:在头文件中声明
参数传递
指针参数在大量数据作为参数输入比较便捷
如进行1000个数据的排序:
int a[1000]={.....................};
void sort(int *b,int size);
sort(a,sizeof(a)/sizeof(a[0]));
引用参数的意外副作用
如何同时返回多个数据
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char *s = "0123456789012345678901234567890";
char *p,*q;
unsigned char tmp;
p = strchr(s, '5');
printf("原来的字符串:%s\n", s);
printf("5之后的字符串:%s\n", p);
tmp = (unsigned char)(strchr(s, '5')-s);
q = (tmp > 0)?strndup(s, tmp):strdup(s);
printf("5之前的字符串:%s\n", q);
return 0;
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
void find_char(string &s,char &ch,int &first,int &sum)
{
int i=0;
while(s[i]!='\0')
{
if(ch==s[i])
{
if(sum==0)
first=i;
sum++;
}
i++;
}
}
int main()
{
string str;
char ch;
getline(cin,str);
cin>>ch;
int first(-1),sum(0);
find_char(str,ch,first,sum);
cout<<first<<endl<<sum<<endl;
cout<<str.length()<<endl ; //string字符串的长度,不包括“\0"
}
const形参和实参
数组参数
传递多维数组
参数传递的练习
#include<iostream>
#include<string>
#include<fstream>
#include<sstream>
using namespace std;
int main()
{
int n,y;
string str;
fstream fp;
fp.open("abc.txt",ios::in);
fp>>n;
for(int i=0;i<=n;i++)
{
int a;
getline(fp,str);
for(stringstream sin(str);sin>>a; )
{
y=1;
cout<<a<<endl;
if(a==-1)
{
cout<<a<<endl;
cout<<"true"<<endl;
cout<<"在第"<<i<<"行第"<<y<<"列"<<endl;
return 0;
}
y++;
}
}
cout<<"false"<<endl;
return 0;
}
返回类型
返回类型和return语句
返回类型——不要返回局部变量的指针和引用
函数返回值的练习
的风格和估计还没
递归函数
递归函数的使用情景
递归函数的运行过程
递归函数练习
思路:
函数的栈机制
栈区
函数调用时栈区的运动
默认参数
例如:
void delay(int a = 2); // 函数声明时
int main(){
delay(); // 默认延迟2秒
delay(2); // 延迟2秒
delay(5); // 延迟5秒
}
void delay(int a){ // 函数定义时
int sum=0;
for(int i=1; i<=a; ++i)
for(int j=1; j<3500; ++j)
for(int k=1; k<100000; ++k) sum++;
}
无名参数
函数定义中省略形参名,表示该形参不能使用
例如:
void point(int a,int)
{
cout<<a<<endl;
}
void func()
{
point(12,15);
}
重载或参数默认
练习
法国v伙伴们,吗n
课程小结