数组名做实参——函数调用

函数调用

函数调用时使用函数名做函数实参,对应的形参类型:

数组元素的类型[ ]

除了在函数原型中使用外,也被用来说明形参的类型。
eg.
如果使用bjs做实参,那么对应的实参的类型是 int[ ];

不可以只有数组名这一个实参

由于数组名的值没有任何关于数组元素个数的信息,所以在使用数组名作为实参时, 通常还需要另外一个实参,就是这个数组元素的个数

例题:本题的主要目的是演示如何通过函数实现对数组的操作


    /*有一数组,共5个元素,其值分别为9、6、5、8、1,通过函数求这个数组中的所以元素的和并输出。
    #include <stdio.h>
    
    int qiuhe(int [],int);/*数组名做函数的实参 函数声明对数组的操作
                            数组定义为"int a[5];",对应的类型为"int[]"。*/ 
     
    int main()
    {
    	int a[5]={9,6,5,8,1};
    	printf("和为%d\n",qiuhe(a,sizeof a/sizeof a[0]));/*实参数组名a,
                                  这里"sizeof a/sizeof a[0] "用来计算数组元素的个数,
    							  要比直接写5更专业、更不容易出错。 */ 
    	return 0;
    }
    
    
    int qiuhe(int p[],int n)/*数组名做函数的实参,函数定义中形参的类型写法
                            (数组定义为"Int a[5]";对应的类型为“int p[]”) 
                      注意:在形参后面的[]里面不应该写任何值,
                            因为写了也没有任何意义,编译器会忽略这个值 */ 
                             
    {
    	int i;
    	int he=0;  //所有元素的和 
    	for(i=0;i<n;i++)
    	he+=p[i];
    	return he;
    }

### 定义方法 在C语言中,当需要将二维数组作为参数传递给函数时,通常有几种常见的方式。一种是直接指定数组的第二维度大小并将其视为指针;另一种则是使用指针数组的形式。 对于第一种情况,可以通过如下声明实现: ```c void func(int (*arr)[N], int rows); ``` 这里`int (*arr)[N]`表示一个指向含有N个整数的一维数组的指针,其中N代表列的数量。这种方式下,编译器能够知道每一行有多少个元素,从而正确解析多维索引。 第二种情况下,则可以采用双重指针(即指向指针的指针)的方式来处理动态分配内存的情况下的二维数组: ```c void func(int **arr, int rows, int cols); ``` 这种情形适用于那些每行列数可能不同的稀疏矩阵或其他不规则结构化数据集[^1]. ### 传参注意事项 需要注意的是,在向函数传递二维数组时,除了要提供足够的尺寸信息以便于访问外,还应该注意区分静态和动态分配的区别。如果是静态定义好的固定大小的二维数组,那么可以直接按照上述提到的第一种方式进行传递,并且不需要额外考虑释放资源等问题。然而,若是涉及到堆上动态创建的对象,则需确保遵循良好的实践原则——谁申请的空间就应该由谁负责清理。 另外一个重要点在于理解如何正确定义形参与实参之间的关系。为了能够在被调用方修改原始数据,应当传递实际存储位置而非副本。这也就意味着应尽可能地利用指针机制完成这一过程,而不是简单复制整个数组的内容[^3]. 最后一点值得注意的地方是在某些特定场景下可能会遇到类型匹配方面的问题。比如试图将一个多维数组整体赋值给另一个相同类型的变量时,默认行为会触发深拷贝语义,这意味着两个独立实体之间没有任何关联变化上的同步效果[^4]. ### 示例代码 下面给出一段简单的例子展示怎样正确地把二维数组当作参数来进行传递及其相应的调用方式: ```c #include <stdio.h> // 函数原型:接受一个m*n大小的整形二维数组以及它的行数rows void printMatrix(int matrix[][3], int rows); int main() { // 初始化一个3x3的二维数组 int myArray[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 调用printMatrix打印该矩阵 printMatrix(myArray, 3); return 0; } // 实现printMatrix函数体 void printMatrix(int matrix[][3], int rows){ for (int i = 0; i < rows ; ++i) { for (int j = 0; j < 3; ++j) { printf("%d ",matrix[i][j]); } putchar('\n'); } } ``` 此程序展示了如何定义、初始化一个三维数组并将它作为一个参数传递给其他函数以供进一步操作的方法.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值