函数的参数和返回值
  • 板块学术版
  • 楼主xiaoyin2011
  • 当前回复11
  • 已保存回复11
  • 发布时间2020/9/2 21:10
  • 上次更新2023/11/5 13:48:28
查看原帖
函数的参数和返回值
377258
xiaoyin2011楼主2020/9/2 21:10

函数的参数和返回值

前言

我跟大家先打个预防针,这种特殊的典论上有正方反方的我是拿不太准,但是我在进行129次试验后发现在一些编辑器上可行,反正有可能出现编辑不过,这就不归我管了... 下面的知识有可能会用到: int 名称 = new int[大小]-动态申请数组 普通函数定义,返回 大家这些要是不会,或是编辑器有问题,我就无能为力了,去看别人的文章吧。

函数的参数是数组

数组要想在函数中传递,必须以指针的方式进行,我们必须知道开始地址和长度或是开始地址和结束地址。

#include <bits/stdc++.h>
using namespace std;
void Print(int *a, int len, char sep, char endline)
{
	for (int i = a; i <= a + len; i++)
	{
		// 输出
		cout << *i << sep;
	}
	// 结束
	cout << endline;
}
int main()
{
	int a[10] = {1, 2, 3, 4 ,5 ,6 , 7, 8, 9, 10};
	Print(a, 10, ' ', '\n');
	return 0;
}
编译成功
1 2 3 4 5 6 7 8 9 10

代码运行结束

如果选的是开始地址和结束地址,无异于是把a + len改到了函数外。

#include <bits/stdc++.h>
using namespace std;
void Print(int *a, int *b, char sep, char endline)
{
	for (int i = a; i <= b; i++)
	{
		// 输出
		cout << *i << sep;
	}
	// 结束
	cout << endline;
}
int main()
{
	int a[10] = {1, 2, 3, 4 ,5 ,6 , 7, 8, 9, 10};
	Print(a, a+10, ' ', '\n');
	return 0;
}
编译成功
1 2 3 4 5 6 7 8 9 10

代码运行结束

大家怎么用就看代码怎么在实战中更方便,时间复杂度都是O(n)

函数的返回值是数组

这个还算复杂啊,用到了前面的new申请空间,还是有点费脑子。

#include <bits/stdc++.h>
using namespace std;
int *create(int len)
{
	int a = new int[len];
	for (int i = 0; i < len; i++)
	{
		// 设置
		a[i] = i;
	}
	return a;
}
int main()
{
	const int a = 10;
	int l[a] = create(a);
	cout <<< l[0] << l[2] << endl;
	return 0;
}
编译成功
02

代码运行结束

但是这样不仅麻烦,主程序还得知道有多长,所以我用了另一种方法,虽然子程序麻烦,但主程序还挺简单的,另外如果不知道长度,这样也能知道。 方法 我觉得代码可以这样写啊:

#include <bits/stdc++.h>
using namespace std;
int *create(int len)
{
	int a = new int[len + 1];
	a[0] = len;
	for (int i = 0; i < len; i++)
	{
		// 设置
		a[i + 1] = i;
	}
	return a;
}
int main()
{
	const int len = create(a)[0];
	int l[len] = create(a);
	cout << l[1] << l[3] << endl;
	return 0;
}
编译成功
02

代码运行结束

问题在于他要调用两边create函数,非常浪费,另外len在调用时已经知道,所以这个案例还是不用这种大胆方案。

函数的参数是函数

这个有点绕,类似sort函数后面的cmp。 用到了函数指针,这样定义

void a(int (*函数名)(参数列表));

看不懂上实例

#include <bits/stdc++.h>
using namespace std;
int *shuzumake(int len, int (*numget)(int))
{
	int a = int[len];
	for (int i = 0; i < len; i++)
	{
		a[i] = numget(i);
	}
	return a;
}
int ng(int i)
{
	return i + 2;
}
int random(int i)
{
	srand(time(0));
	return rand() % 100;
}
int main()
{
	int a[10] = shuzumake(10, ng);
	cout << a[2] << endl;
	int b[5] = shuzumake(5, random);
	cout << a[8] + b[3] << " " << a[9] * b[1] << endl;
	return 0;
}

事实上,每次不是相同的输出结果,所以我就没写输出,大家运行着看,是不是还挺好用的?

2020/9/2 21:10
加载中...