Some Notes

Be HardWorking Every Day.

函数

函数的作用

一般来说,我都是懂的。函数的总用比较简单:

  1. 优化代码量
  2. 让程序代码更加清晰明了
  3. 调用时更加方便

总之,函数的存在就是为了更加方便清晰快速

定义函数

方法:

[函数类型] [函数名称]([参数])
{
    [主体] ;
    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还是ab还是b

这是因为swap(int, int)只是把函数内的xy交换了而已,ab没有交换。

因为xy对于*main函数*来说只是形参,xy只是拷了一份ab

如果想交换ab需要这样写:

#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) ;
}

此时此刻,你使用xy就相当于引用了ab

函数重载

函数名不可重复。

但是有几种方法可以重复:

  • 函数参数类型不同
  • 函数参数数量不同

比如:

#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

注意:仅仅函数类型不同不足以区分两个函数!

拓展:主函数中的argcargv 实际上我不懂

用法:

int main(int argc, char *argv[])

或:

int main(int argc, char **argv)

含义:

  1. argc是argument count 的缩写,保存运行时传递给main函数的参数个数。
  2. 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函数参数作用。