1、 数组作为参数
当数组作为参数时,形式参数与实际参数都指向同一个地址,所以,当函数中的形式参数里面的内容发生了变化,
就会影响到函数外的实际参数的内容也一起发生变化。
简单来说,当形式参数是数组时,函数调用完毕后,数组中的内容会保存下来。
=======================================================================
2、例子:
void mx(int x[2])
{
x[0]=x[1]+1;
}
void main()
{
int a[2]={1,2};
mx(a);
}
例子分析:
(1)通过上面的例子,我们首先在mx函数中定义了1个数组x作为形式参数。
(2)然后,在main函数中,调用mx函数时,我们就将数组a作为实参传递给mx函数中的形参x
(3)然后,在mx函数中,形参x通过下标1取出数组中的元素2,然后加上1结果等3,
再赋值给数组x下标为0的元素,所以,下标为0的元素就从1变为3。
(4)当mx函数调用完毕以后,实参数组a中的内容发生了变,数组a中第1个元素由1变成了3。
重点分析:
(1)为什么实参数组a中的内容会发生变化?
原因是这样的,因为,当我们使用数组名作为实参时,
它是将实参数组的在内存中起始地址传递给形参数组,
所以,形参数组与实参数指向同一个内存存储位置。
这样,当形参中的内容改变时,就会直接影响到实参的内容,
所以,这种情况的参数传递与(变量或数组元素的传递)是不一样的。
(2)使用数组名作为参数传递时,实参数的类型与形参的类型必须一致。
(3)使用数组名作为参数传递时,形参与实参都必须被定义为数组。
(4)使用数组名作为参数传递时,形参的数组大小可以不指定,即数组名后跟一对空的中括号,即int a[ ],
因为C编译时不对形参数组的大小做检测,只将实参数组的首地址传递给形参。
=======================================================================
3、例子:
void mx(int x[ ][ 2 ])
{
x[0][1]=x[1][1]+1;
}
void main()
{
int a[2][2]={ {1,2},{3,4} };
mx(a);
}
例子分析:
(1)通过上面的例子,我们首先在mx函数中定义了1个二维数组x作为形式参数
(2)然后,在main函数中,调用mx函数时,我们就将二维数组a作为实参传递给mx函数中的形参x
(3)然后,在mx函数中,形参x通过行下标1与列下标1,取出数组中第2行,第2列的元素4,
然后加上1结果等5,再赋值给数组x行下标为0,列下标为1的元素2,
所以,第1行第2列的元素就从2变为5。
(4)当mx函数调用完毕以后,实参数组a中的内容发生了变,数组a中第1列,第2列的元素由2变为了5。
重点分析:
(1)二维数组作为实参传递与一维数组是类拟的。
(2)形参中的二维数组定义的第一维可以不指定大小,但第二维必须指定大小。
=======================================================================
4、数组元素作为参数
例子:
void mx(int x,float y)
{
x=x+1;
y=y-1;
}
void main()
{
int a[2]={1,2};
float b[2]={1.5,2.5};
mx(a[1],b[0]);
}
例子分析:
(1)通过上面的例子,我们首先在main函数中定义了两个数组,分别是整型数组a和浮点数组b。
(2)然后,在mx函数被调用时,我们取出了数组a中下标为1的元素“2”作为第1个参数传递给mx函数的形式参数x,
然后,再取出数组b中下标为0的元素“1.5”作为第2个参数传递给mx函数形式参数y。
通过,这个例子,相信大家就可以了解到,使用数组元素作为参数与使用变量作为参数是类似的。
=======================================================================
非常好,现在,我们已经掌握了C语言中的(数组作为参数)但是,如何去运行用它呢?
所以,我们就需要通过下方的链接,进入到C语言的代码训练中,然后,通过实践去加深对该知识点的理解与运用。
>>>下载训练环境与使用说明(使用真实的开发环境,结合游戏闯关进行
编程训练)
|