首先数组元素可以作为实参,其用法与变量完全相同。图5.5程序运行结果说明:用数组名作函数参数,应该在主调函数和被调用函数分别定义数组,例中array 是形参数组名,score 是实参数组名,分别在其所在函数中定义,不能只在一方定义。图5.8程序运行结果用数组名作为函数参数时应注意以下几点:形参数组和实参数组的类型必须一致。......
2025-09-30
二维数组在存储时也是有序地占用一片连续的内存区域,数组的名字表示这段存储区域的首地址。需要特别注意的是,二维数组起始地址有多种表示方法,而且这些表示方法在物理含义上还有表示平面起始地址和表示线性起始地址之分,所以在使用二维数组的起始地址时必须注意区分需要用哪一种起始地址。以二维数组a为例,二维数组起始地址的表示方法以及各种表示方法的级别(包含的物理含义)有:
·数组名:a,表示二维数组的起始地址,二级地址;
·数组首元素地址:&a[0][0],表示二维数组的线性起始地址,一级地址;
·数组0号行名字:a[0],表示二维数组的线性起始地址,一级地址;
·数组名指针运算后的地址:a,表示二维数组的线性起始地址,一级地址;
由于二维数组的起始地址有一级地址和二级地址之分,所以二维数组作为函数调用实际参数时可以分为二级地址参数和一级地址参数两种。
图6.10 实际参数为二维数组名字
1.用二维数组名作为实际参数
用二维数组名作为函数参数实现的是“传地址值调用”,其本质仍然是在函数调用期间实际参数数组将它的全部存储区域提供给形式参数数组共享,即形参数组与实参数组是同一存储区域。直观地说,就是同一个数组在主调函数和被调函数中有两个不同(甚至相同)的名字。由于此时函数调用的实际参数是二维数组名,被调函数中的形式参数需要使用二维数组样式,数组存储区域全部共享时形参数组与实参数组的关系如图6.10所示。
【例6.16】 编写求二维矩阵最大元素的函数(假定矩阵为3行4列),用相应主函数进行测试。
例6.16程序的函数max中使用了二维数组样式的形式参数接收从主调函数中传递过来的二维数组首地址,使得形参数组v共享实参数组a的存储区域;然后通过对形参数组v的操作达到操作参数a的目的,即在形参数组v中寻找最大值实质上是在实参数组a中寻找最大值,程序执行的结果为:
Max value is:789。
2.用二维数组起始地址的一级地址形式作为实际参数(https://www.chuimin.cn)
例6.16程序的致命弱点是只能求列数是N列矩阵的最大元素。在实际应用程序设计中,有时需要能够处理任意行列大小的二维数组的函数(例如,要求上例中的函数max能够查找任意二维数组中的最大元素),此时直接用二维数组作为形式参数的设计形式就不太适合。为了提高函数的通用性,可以借助一维数组作为形式参数时可以不指定长度的特点,使用一维数组样式的形式参数接收二维数组实参。这种参数传递实质上就是要用线性数据的处理方法来处理平面形式的数据(读者可以在此基础上考虑更高维数组的处理),实现这种参数传递时须注意以下两点:
·数调用时的实际参数必须是二维数组起始地址的一级地址形式,同时还应将二维数组的构造信息(行数和列数)传递到被调函数中。
·被调函数中只知道被处理二维数组的起始地址,所以在处理过程中二维数组每一行的长度由程序员根据参数表中传递过来的信息自行控制。
【例6.17】 重新设计例6.16中的函数max,使其能够处理任意行列的二维数组,并用相应的主函数进行测试。
程序中函数max用一维数组样式的形式参数v来接收从主调函数中传递过来的二维数组首地址,注意到二维数组的名字表示的是二级地址,所以被传递的二维数组首地址要使用3种一级地址形式之一,本示例中使用的是a[0],还可以使用&a[0][0]和a形式。在被调函数中将传递过来的二维数组当作一维数组处理,其元素对应关系应该是:a[i][j]→v[in+j]。程序执行的结果为:
Max value is:789。
相关文章
首先数组元素可以作为实参,其用法与变量完全相同。图5.5程序运行结果说明:用数组名作函数参数,应该在主调函数和被调用函数分别定义数组,例中array 是形参数组名,score 是实参数组名,分别在其所在函数中定义,不能只在一方定义。图5.8程序运行结果用数组名作为函数参数时应注意以下几点:形参数组和实参数组的类型必须一致。......
2025-09-30
循环获取数组元素进行运算是很常见的操作,数组具有length属性,因此往往会使用for i++形式对数组进行迭代。in迭代数组使用typeof检测数组,返回"object",表明数组也属于对象,可以使用for…in语句会自动跳过该索引,for i++则不会跳过。◇ thisArg:可选参数,表示执行callback时绑定的this对象。动手写9.4.12执行9.4.12.html,输出结果到网页,如下图所示。图9.4.12使用forEach()迭代数组......
2025-09-30
而当用数组名作函数参数时,情况则不同。由于实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。本程序与例5.5程序相比,aver()函数的形参数组长度改为8,而在函数体中,for语句的循环条件也改为i<8。因此,形参数组a和实参数组sco的长度不一致。例5.7把例5.5程序中的函数的形参数组不指定长度,并改写程序。......
2025-09-30
指针及数组名作为函数的参数时,是以数据的地址作为实参调用该函数,即作为参数传递的不是数据本身,而是数据对应的地址,使实参和形参指向同一存储单元。所以,调用函数与被调函数存取的将是相同的一组空间,即双向的“地址”传递,也就是说函数调用后,实参指向的对象的值可能会发生变化。图6.15程序运行结果从程序运行结果可以明显地看出,只有swap3 函数能实现交换两个整数的目的。......
2025-09-30
图4.3二维数组编译程序将开辟3×4=12 个连续存储单元,按行连续存放数组a 的12 个元素。图4.4二维数组在存储器中的存储顺序2.二维数组的初始化二维数组初始化和一维数组初始化的方法基本相同,也可以在定义时赋以初值。不分行给二维数组所有元素赋以初值,即所有元素的初值写在同一对大括号内。......
2025-09-30
调用sort()函数但没有传递callback参数时,根据数字大小或字符串的Unicode编码对元素排序。动手写9.4.13执行9.4.13.html,输出结果到网页,如下图所示。图9.4.13使用sort()对数组排序排序稳定性是指数组每次排序的结果都一样。提示如果sort()函数使用的比较函数callback()是稳定的,那么在排序前后,数组内多个相等的元素相互之间的相对位置不会改变。......
2025-09-30
补间铺作、柱头铺作、转角铺作一等材(六分)各件尺寸开后[补间铺作]第一铺作:栌枓一个,长一尺九寸二分,高一尺二寸,宽一尺九寸二分。(二)七铺作重栱出双抄双下昂,里转六铺作重栱出三抄,并计心。......
2025-09-30
郑作新时任中国科学院动物研究室研究员、中国动物学会秘书长,是反对灭雀者中唯一亲身研究过麻雀的鸟类学家。虽有不少人也同意郑作新的意见,但都不敢提出反对意见,因为除“四害”是党中央、毛主席的指示。作新与众不同,相信科学真理,也相信党中央、毛主席会尊重科学真理。可怜的小麻雀应该感谢郑作新当了它的“辩护律师”,使它免去一场横遭消灭的灾难。郑作新把探索真理、坚持真理和宣传真理作为科学家的神圣责任。......
2025-09-30
相关推荐