C+±023-数组作为函数参考-2020-3-9
不但可以使用变量作函数参考,还可以使用数组元素作为函数实参,其用法与变量相同。数组名也可以作实参和形参,传递的是数组首地址。
下例是用数组元素作函数实参。
数组元素做函数实参
#include
using namespace std;
void change(int a,int b)
{int temp;temp=a;a=b;b=temp;
}
int main()
{int a[]&#61;{1,2,3,4,5,6,7,8};int b[]&#61;{-1,-2,-3,-4,-5,-6,-7,-8};int i;for (i&#61;0;i<8;i&#43;&#43;)change(a[i],b[i]);for(i&#61;0;i<8;i&#43;&#43;){cout<<"a:"<<a[i]<<endl;cout<<"b:"<<b[i]<<endl;}return 0;
}
a:1
b:-1
a:2
b:-2
a:3
b:-3
a:4
b:-4
a:5
b:-5
a:6
b:-6
a:7
b:-7
a:8
b:-8--------------------------------
Process exited with return value 0
Press any key to continue . . .
首先我们可以看出&#xff0c;使用数组元素作参数的用法与用变量作实参的用法是一样的。其次我们可以看出&#xff0c;虽然change函数中a与b的值互换了&#xff0c;但是最后打印的结果仍然未变。这说明参数的值是单向传递。即系统将a[i],b[i]值的拷贝传给了change函数&#xff0c;change函数所交换的是a[i],b[i]的拷贝&#xff0c;a[i]b[i]值的本身未变。
用数组名作参数1
#include
using namespace std;
void change(int x[],int y[])
{int temp,i;for(i&#61;0;i<8;i&#43;&#43;){temp&#61;x[i];x[i]&#61;y[i];y[i]&#61;temp; }
}
int main()
{int a[]&#61;{1,2,3,4,5,6,7,8};int b[]&#61;{-1,-2,-3,-4,-5,-6,-7,-8};int i;change(a,b);for(i&#61;0;i<8;i&#43;&#43;){cout<<"a:"<<a[i]<<endl;cout<<"b:"<<b[i]<<endl;}
}
a:-1
b:1
a:-2
b:2
a:-3
b:3
a:-4
b:4
a:-5
b:5
a:-6
b:6
a:-7
b:7
a:-8
b:8--------------------------------
Process exited with return value 0
Press any key to continue . . .
这个程序看似和上个程序一样&#xff0c;可是运行后我们却发现&#xff0c;数组a与数组b的值居然互换了。这是因为我们是用数组名作参数&#xff0c;所传递的不是它的拷贝&#xff0c;而是它的内存地址&#xff0c;所以&#xff0c;change函数形参中的数组x和数组y的首地址与main函数中数组a&#xff0c;数组b的首地址是指向同一个位置的&#xff0c;因为针对数组x&#xff0c;y的操作实际上也即是针对数组a&#xff0c;b的操作。
这是数组名作参数的一个很重要的知识点&#xff0c;请一定要掌握。
用数组名作参数2
#include
using namespace std;
int Max(int a[][4])
{int i,j,Max;Max&#61;a[0][0] ;for(i&#61;0;i<3;i&#43;&#43;)for(j&#61;0;j<4;j&#43;&#43;)if(a[i][j]>Max)Max&#61;a[i][j];return Max;
}
int main()
{int a[][4]&#61;{1,2,3,4,5,6,7,8,9,-1,-2,-3};cout<<"最大值为"<<Max(a)<<endl;return 0; }
最大值为9--------------------------------
Process exited with return value 0
Press any key to continue . . .