C++:函数(参数传递、默认参数

 

函数

目录

函数基础

函数定义:

函数调用: 函数名(实参列表);

函数原型:

形式:

作用:

参数传递

引用参数的意外副作用

如何同时返回多个数据

const形参和实参

数组参数

​传递多维数组

参数传递的练习

返回类型

返回类型和return语句

返回类型——不要返回局部变量的指针和引用

函数返回值的练习

递归函数

递归函数的使用情景

递归函数的运行过程

递归函数练习

函数的栈机制

栈区

函数调用时栈区的运动

​​

默认参数

无名参数

重载或参数默认

练习

课程小结


基础

函数:是一个命名的代码块,可以被调用执行相应的代码,完成一定的功能

函数定义:

返回类型 函数名(参数列表)

{  

             //函数体

}

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

课程小结

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值