C++数组作为函数参数

数组元素作实参,与单个变量一样。

数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址。对形参数组的改变会直接影响到实参数组。

例:主函数中初始化一个矩阵并将每个元素都输出,然后调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。

#include <iostream>
using namespace std;
void rowSum(int a[][4], int nRow) {
	for (int i = 0; i < nRow; i++) {
		for(int j = 1; j < 4; j++)
			a[i][0] += a[i][j];
	}
} 
int main() {	//主函数
	int table[3][4] = {{1, 2, 3, 4},
    {2, 3, 4, 5}, {3, 4, 5, 6}};
  //声明并初始化数组
//输出数组元素
	for (int i = 0; i < 3; i++)	{
		for (int j = 0; j < 4; j++)
			cout << table[i][j] << "   ";
		cout << endl;
	}
	rowSum(table, 3);	//调用子函数,计算各行和
  //输出计算结果
	for (int i = 0; i < 3; i++)	
		cout << "Sum of row " << i << " is " << table[i][0] << endl;
	return 0;
}

C++数组作为函数参数的使用方法和注意事项如下: ### 使用方法 - **一维数组** - 传递数组指针和数组大小:可以将数组名(即数组元素的地址)作为指针传递给函数,同时显式传递数组的大小。示例代码如下: ```cpp #include <iostream> void func(int* arr, int size) { for (int i = 0; i < size; i++) { std::cout << arr[i] << " "; } } int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); func(arr, size); return 0; } ``` - 使用模板:对于已知大小的数组,可以使用模板来保留数组的类型信息。示例代码如下: ```cpp #include <iostream> template<size_t N> void func(int (&arr)[N]) { for (int i = 0; i < N; i++) { std::cout << arr[i] << " "; } } int main() { int arr[] = {1, 2, 3, 4, 5}; func(arr); return 0; } ``` - **多维数组** - 必须指定除第一维外的所有维度。例如,对于二维数组,需要指定第二维的大小。示例代码如下: ```cpp #include <iostream> void processMatrix(int matrix[][10], int rows) { for (int i = 0; i < rows; i++) { for (int j = 0; j < 10; j++) { std::cout << matrix[i][j] << " "; } std::cout << std::endl; } } int main() { int matrix[5][10]; processMatrix(matrix, 5); return 0; } ``` ### 注意事项 - **大小丢失**:数组作为函数参数传递后,其大小信息丢失,只剩下数组第一个元素的信息。无法通过参数获取数组实际大小,解决方案是显式传递大小参数。例如在上述一维数组传递指针和大小的示例中,就显式传递了数组大小 `size` [^1][^3]。 - **类型退化**:数组会退化为指针,可使用引用或模板保留类型信息。如上述使用模板的一维数组示例,就保留了数组的类型信息 [^3]。 - **修改风险**:函数内可能意外修改原数组,可使用 `const` 限定符保护数据。示例代码如下: ```cpp #include <iostream> void func(const int* arr, int size) { for (int i = 0; i < size; i++) { std::cout << arr[i] << " "; } // 以下代码会报错,因为 arr 是 const 类型 // arr[0] = 10; } int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); func(arr, size); return 0; } ``` - **现代C++建议**:现代C++优先使用 `std::array` 或 `std::vector` 来替代传统数组,它们能更好地管理数组的大小和生命周期 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值