为什么要用函数
在程序设计中,我们会发现一些程序段,在程序的不同地方反复出现,我们就可以写成函数,反复使用。体现“模块化编程”的思想。
函数的定义
数据类型 函数名(形式参数){
函数体
}
void f(){
cout << "hello" << '\n';
}
void f(int x){
cout << x << '\n';
}
int f(int a, int b){
return a + b;
}
函数的声明和调用
#include <iostream>
using namespace std;
void f()
{
cout << "函数调用一次" << "\n";
}
int main()
{
f();
f();
return 0;
}
函数的传值调用
// 值传递
void fun(int x)
{
x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x;这样也增加程序运行时间,降低了程序的效率
}
void main(void)
{
int y = 0;
fun(y);
cout<< "y = " << y << endl; //y = 0;
}
// 指针传递
void fun(int *x)
{
*x += 5; //修改的是指针x指向的内存单元值
}
void main(void)
{
int y = 0;
fun(&y);
cout<<"y = "<<y<<endl; //y = 5;
}
// 引用传递
void fun(int &x)
{
x += 5; //修改的是x引用的对象值 &x = y;
}
void main(void)
{
int y = 0; //引用的实参必须初始化
fun(y);
cout<<"y = "<<y<<endl; //y = 5;
}
// 关于&的举例
#include <bits/stdc++.h>
using namespace std;
char a, b, c;
int main()
{
a = 'a', b = 'b', c = 'c';
cout << &a << '\n';
return 0;
}
// 代码1
#include <iostream>
using namespace std;
void swap(int a, int b)
{
int t = a;
a = b;
b = t;
}
int main()
{
int a = 1, b = 2;
swap(a, b);
cout << a << ' ' << b << '\n';
return 0;
}
/*
1 2
*/
// 代码2
#include <iostream>
using namespace std;
void swap(int &a, int &b)
{
int t = a;
a = b;
b = t;
}
int main()
{
int a = 1, b = 2;
swap(a, b);
cout << a << ' ' << b << '\n';
return 0;
}
/*
2 1
*/
#include <bits/stdc++.h>
using namespace std;
void f(char *a, char *b)
{
a = b;
(*a)++;
}
int main()
{
char c1, c2;
char *p1, *p2;
c1 = 'A', c2 = 'a';
p1 = &c1, p2 = &c2;
f(p1, p2);
cout << c1 << ' ' << c2 << '\n';
return 0;
}
全局变量、局部变量、作用域
递归的概念
一本通习题
函数
#include <bits/stdc++.h>
using namespace std;
void f(int x)
{
if (x == 0) return ;
cout << x;
f(x - 1);
}
int main()
{
int n, m;
cin >> n; //10`
f(n);
puts("");
return 0;
}
//
//
//
//
//
//
//这个麻烦
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//位运算
for (int j = 0; (1 << j) <= x; j++)
{
if (x & (1 << j)) one++;
sum++;
}
//
递归算法
注意以下题目使用递归实现
//
//
//
//
//
//
//
//
//
//