(九十七)函数与array对象

首先复习array类对象,他是一个数组类。

 

①首先需要头文件<array>

②声明格式:array<类型名, 成员数量>数组名;

③初始化:array<类型名, 成员数量>数组名={成员1, 成员2,……};

④需要使用名称空间std(就像cincout那样);

⑤类型名可以为字符串,或者string类等。

 

若要在函数中引入array对象,那么将和结构、string类似。

 

引入array对象:则传递的参数应为:array<类型名成员数量>

直接修改原array对象:在前者的前提下,使用指针或者地址运算符&

 

如代码;

#include<iostream>
#include<array>
using namespace std;
const int m = 4;

void show(array<double, m>,array<char[10],m>);	//显示,输入int类型和字符串类型的array数组
void change(array<double, m>*);	//指针作为参数,使原数组的值+1。
array<double, m> half(array<double, m>*);	//将数组地址作为参数,将输入值乘以1/2并返回一个array数组(double类型)
array<double, m>*zhizhen(array<double, m>);	//输入array数组,返回一个新数组的指针

int main()
{
	array<double, m>player = { 10,15,20,25 };	//创建一个array对象数组
	array<char[10], m>shuxing = { "str: ","dex: ","def: ","luck: " };	//创建属性描述数组,array可以创建其他类对象,比如字符串、string类等
	show(player,shuxing);	//调用函数,显示player

	cout << endl;
	cout << "******修改属性ing*****" << endl << endl;;
	change(&player);	//将player的地址作为参数,然后调用change函数,无返回值。
	show(player,shuxing);	//显示改变之后的player数组

	cout << endl << "**********现在将属性减半****************" << endl << endl;
	array<double, m>player_2 = half(&player);	//调用half函数,将player减半后的数值赋值给player_2数组
	show(player_2, shuxing);	//显示player_2数组

	array<double, m>*another = zhizhen(player_2);	//player_2数组作为参数,返回值为指针,赋值给array指针another
	show(*another, shuxing);	//显示another数组

	system("pause");
	return 0;
}

void show(array<double, m>player,array<char[10],m>shuxing)	//array数组作为参数,无返回值
{
	static int n = 1;	//局部函数静态变量n,用于计数属性显示次数。
	cout << "这是第 "<<n<<" 次显示属性:" << endl;
	for (int i = 0;i < m;i++)
		cout << shuxing[i] << player[i] << endl;	//循环输出属性
	cout << "————————————" << endl << endl;
	n++;
}

void change(array<double, m>*player)	//array指针作为参数,无返回值(直接通过指针操纵数组)
{
	for (int i = 0;i < m;i++)
		(*player)[i] += 1;	//引入的是指针,直接通过指针操纵值每个都加1
}

array<double, m> half(array<double, m>*player)	//array指针作为参数,返回array数组(一个新的数组)
{
	array<double, m> half;	//创建一个新数组
	for (int i = 0;i < m;i++)
		half[i]=(*player)[i] / 2;	//新数组的值是指针指向数组的值的1/2
	return half;	//返回数组
}

array<double, m>*zhizhen(array<double, m>player)	//array数组作为参数,返回指针(一个新的指针)
{
	array<double, m>*x = new array<double, m>;	//new一个array对象指针数组
	for (int i = 0;i < m;i++)
		(*x)[i] = player[i]+20;	//指针数组的值,是数组对应位置的值+20
	return x;	//返回指针
}

输出:


这是第 1 次显示属性:
str: 10
dex: 15
def: 20
luck: 25
————————————


******修改属性ing*****

这是第 2 次显示属性:
str: 11
dex: 16
def: 21
luck: 26
————————————


**********现在将属性减半****************

这是第 3 次显示属性:
str: 5.5
dex: 8
def: 10.5
luck: 13
————————————

这是第 4 次显示属性:
str: 25.5
dex: 28
def: 30.5
luck: 33
————————————

请按任意键继续. . .

解释:

①思路是:

创建一个double数组,一个char[10]数组,前者为属性,后者为文字;

 

输出这个数组(show函数);

 

这个数组的地址作为参数,通过函数来使得这个数组的每个成员的值都+1change函数);输出原array数组指针的值(show函数)

 

创建一个新array数组,调用函数half,使新数组的值,为函数half参数的数组的值的一半;输出新的array数组的值(show函数)

 

创建一个新的array数组指针,调用函数zhizhen,在函数中,创建一个新的指针,这个指针每个成员的值,为作为参数的数组成员的值+20,然后函数返回新指针的地址。于是,将函数返回值的地址,赋给新的array数组指针。输出新的array数组指针的值(show函数)

 

 

②注:蓝色字体函数原型时可以省略

array数组作为参数:

array<类型名,成员数> 变量名

void show(array<double, m>,array<char[10],m>);

 

array数组指针(地址)作为参数:

array<类型名,成员数>* 变量名

void change(array<double, m>*);

 

返回值为array数组:

array<类型名,成员数> 函数名( 传递的参数 )

array<double, m> half(array<double, m>*)

 

返回值为array指针:

array<类型名,成员数>函数名( 传递的参数 )

array<double, m>*zhizhen(array<double, m>)

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值