首先复习array类对象,他是一个数组类。
①首先需要头文件<array>;
②声明格式:array<类型名, 成员数量>数组名;
③初始化:array<类型名, 成员数量>数组名={成员1, 成员2,……};
④需要使用名称空间std(就像cin和cout那样);
⑤类型名可以为字符串,或者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函数);
这个数组的地址作为参数,通过函数来使得这个数组的每个成员的值都+1(change函数);输出原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>)