c++学习笔记(五)

数组作为函数参数

定义

数组可以作为函数的参数使用,进行数据传送。

数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。

1、数组元素作为函数实参

数组元素就是下标变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传递给形参,实现单向的值传递。

2、数组名作为函数参数

注:(1)与数组元素作为函数参数不同的是,用数组名作为函数参数时,要求形参与相对应的实参都必须是类型相同的数组,否则会发生错误。

(2)用数组名作为函数参数时,并不是进行值的传递,即不是把实参数组的每一个元素的值都赋与形参数组的各个元素。因为实际上形参数组并不存在,编译系统并不为形参数组分配内存。

数据的传递:数组名就是数组的首地址。因此在数组名作为函数参数时所进行的传递只是地址的传递,也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也等于有了实际的数组,即实参与形参有一段共用的内存空间。

二维数组作为函数参数

规定:如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,数组的行数没有太大关系,可以指定也可以不指定。

因为函数调用时传递的是一个指针,它指向由行向量够成的一维数组。

因此二维数组作为函数参数正确写法如下所示:

void F(int a[5][5]); 

void F(int a[ ][5]);

或者

void F(int (*a)[10]); //星号和数组名需要用括号包起来,这种形式的声明参数是一个指针,它指向具有10个元素的一维数组。

不加括号的参数是一个数组,每个元素都是指针。

void Func(int *array[10]);//这时候参数相当于是声明了一个数组,该数组有10个元素,其中每个元素都是一个指向整型对象的指针。

实践二维数组作函数参数:

#include<iostream>
using namespace std;
void f(int (*)[3],int a);
int main()
{
	int a[2][3]={
	{1,1,1},
	{2,2,2}
	};
	f(a,2);
}
void f(int (*a)[3],int l)
{
	for(int i=0;i<l;i++)
	for(int j=0;j<3;j++)
	cout<<a[i][j]<<",";
	cout<<endl;
}
posted @ 2020-02-03 12:45  hqk111  阅读(89)  评论(0编辑  收藏  举报