函数的作用
一般来说,我都是懂的。函数的总用比较简单:
- 优化代码量
- 让程序代码更加清晰明了
- 调用时更加方便
总之,函数的存在就是为了更加方便,清晰,快速。
定义函数
方法:
[函数类型] [函数名称]([参数])
{
[主体] ;
return [] ;
}
如:
int add(int x, int y)
{
int ans = x + y ;
return ans ;
}
注意:当不返回(无return
)时,函数类型应为void
(表面含义无类型)。
形参和实参
当你运行这段代码时:
#include <stdio.h>
using namespace std ;
int swap(int x, int y)
{
int t = x ;
x = y ;
y = t ;
}
int main()
{
int a, b ;
scanf("%d %d", &a, &b) ;
swap(a, b) ;
printf("%d %d\n", a, b) ;
}
你会发现a
还是a
,b
还是b
。
这是因为swap(int, int)
只是把函数内的x
和y
交换了而已,a
和b
没有交换。
因为x
和y
对于*main
函数*来说只是形参,x
和y
只是拷了一份a
和b
。
如果想交换a
和b
需要这样写:
#include <stdio.h>
using namespace std ;
int swap(int &x, int &y)
{
int t = x ;
x = y ;
y = t ;
}
int main()
{
int a, b ;
scanf("%d %d", &a, &b) ;
swap(a, b) ;
printf("%d %d\n", a, b) ;
}
此时此刻,你使用x
和y
就相当于引用了a
和b
。
函数重载
函数名不可重复。
但是有几种方法可以重复:
- 函数参数类型不同
- 函数参数数量不同
比如:
#include <stdio.h>
using namespace std ;
int add(int a, int b)
{
return a + b ;
}
void add()
{
printf("Hello\n") ;
}
int main()
{
int n = add(1, 2) ;
printf("%d\n", n) ;
add() ;
return 0 ;
}
输出:
3
Hello
注意:仅仅函数类型不同不足以区分两个函数!
拓展:主函数中的argc
和argv
实际上我不懂
用法:
int main(int argc, char *argv[])
或:
int main(int argc, char **argv)
含义:
argc
:是argument count 的缩写,保存运行时传递给main函数的参数个数。argv
:是argument vector 的缩写,保存运行时传递main函数的参数,类型是一个字符指针数组,每个元素是一个字符指针,指向一个命令行参数。
比如:
#include <stdio.h>
using namespace std ;
int main(int argc, char *argv[])
{
printf("sum: %d\n", argc) ;
for(int i = 0; i < argc; i ++)
{
printf("argc[%d], %s\n", i, argv[i]) ;
}
return 0 ;
}
打开命令行,cd
文件所在文件夹,输入:[file name].[file extension] hello world i am so happy
结果为:
sum: 7
argc[0], 未命名1.exe
argc[1], hello
argc[2], world
argc[3], i
argc[4], am
argc[5], so
argc[6], happy
这就是main
函数参数作用。