C++函数和二维数组(学习笔记)

文章讨论了如何将二维数组作为函数参数处理,强调数组被视为地址,因此传入的是指针。函数`sum`接受一个指向含有3个整数的数组指针和数组的行数。参数`arr`指向每列的地址,通过`arr[i][j]`访问元素,其中`arr+i`指向第i个列数组,`*(arr+i)+j`则访问第i个列的第j个元素。由于列数在指针类型中指定,所以函数可以处理不同行数但固定列数的数组。
摘要由CSDN通过智能技术生成

编写将二维数组作为参数的函数,必须牢记,数组被视为地址,因此相应的形参是一个指针

//主函数部分
#include<iostream>
int sum(int(*arr)[3], int size);//声明函数
int main() {
	int data[4][3] = { {1,2,3},{4,5,6},{7,8,9},{10,11,12} };
	int total = sum(data, 4);
	
	
	return 0;
}

data作为二维数组,arr作为数组名,并不指向二维数组第一个元素的地址,arr指向第一个列数组的地址(方便理解可以把第一个列数组看作一个单独一维数组),int(arr)[3]定义了列数,可以把(arr)看作一个新的一维数组名

参数arr是指向数组的指针,该如何使用,(将arr看作二维数组的名称)

//函数体部分
int sum(int arr[][3], int size) {    //int arr[][3]=int(*arr)[3]
	int total = 0;
	for (int i = 0; i < size;i++) {
		for (int j = 0; j < 3; j++) {
			total+= arr[i][j];
		}
	}
	return total;
}
arr是指针而不是数组。指针类型指出,它指向由3个int组成的数组。因此指针类型指定了列数([3]),这就是没有将列数作为独立函数参数传递的原因。
由于指针类型指定了列数,因此sum函数只能接受4列组成的数组,但长度变量(size)指定了行数,因此sum对行数没有限制
arr[i][j]=*(*(arr+i)+j);  //连续两次解除指针应用
arr             //指向第一个含有3个元素的列数组(整个一维数组)
​
arr+i          //指向第i个含有3个元素的列数组
​
*arr          //第一个列数组的第一个元素的地址
​
*(arr+i)      //第i个列数组的第一个元素的地址
​
(*(arr+i)+j)  // 第i个列数组的第j个元素的地址
​
*(*(arr+i)+j) //第i个列数组的第j个元素的值

由内而外解析表达式

sum()声明参数arr 的时候没有使用 const,因为const只能指向基本类型的指针,而arr是指向指针的指针(arr指向了一个指向第一个列元素第一元素指针,也就是*arr)

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值