二维数组用于函数的参数

  • int* p; 整型指针;
  • int* p[3]; 一维整型指针数组,元素是3个整型指针(p[0], p[1], p[2]);
  • int* p(); 函数p的返回类型是整型的地址;
  • int (*p)(int,int) p是函数指针,函数的返回值是整型。

1、行指针(数组指针)

声明行指针的语法:数据类型 (*行指针名)[行的大小];//行的大小即数组长度。

  • int (*p1)[3]: p1是行指针,用于指向数组长度为3的int型数组;
  • double (*p2)[5]:p2是行指针,用于指向数组长度为5的double型数组;
    一维数组名被解释为数组第0个元素的地址。
    对一维数组名取地址得到的是数组的地址,是行地址

例:

#include <iostream>
using namespace std;


int main()
{
	int a[10];
	cout << "数组a的第0个元素地址为:" << a << endl;
	cout << "数组a的地址为:" << &a << endl;

	cout << "数组a的第0个元素的地址+1为:" << a + 1 << endl;
	cout << "数组a的地址+1为:" << &a + 1 << endl;
	
	return 0;
}

运行结果为:

数组a的第0个元素地址为:0000003E732FF888
数组a的地址为:0000003E732FF888
数组a的第0个元素的地址+1为:0000003E732FF88C
数组a的地址+1为:0000003E732FF8B0

C:\code\day\x64\Debug\day.exe (进程 26188)已退出,代码为 0。
按任意键关闭此窗口. . .

分析:数组a的第0个元素的地址+1为第一个元素的地址,相当于加了一个int的字节数(4);而数组a的地址+1(&a+1)相当于加了数组这块内存的字节数(40)。
一维数组名被解释为数组第0个元素的地址。对一维数组名取地址得到的是数组的地址,是行地址。

2、二维数组名是行地址

int a[2][3] = {{11,12,13},{21,22,23}};
  • a是二维数组名,该数组有两个元素,每个元素本身又是一个数组长度为3的整型数组;
  • a被解释为数组长度为3的整型数组类型的行地址;
  • 如果存放a的值,要用数组长度为3的整型数组类型的行指针。
int (*p)[3] = a;

3、把二维数组传递给函数

如果把数组a传递给函数,函数的声明如下:

void func(int (*p)[3],int len);//或者void func(int p[][3],int len)

4、例题:

#include <iostream>
using namespace std;

//void func(int (*p)[3],int n)
void func(int p[][3],int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << "p[" << i << j << "] = " << p[i][j] <<"\t";
		}
		cout << endl;
	}
}

int main()
{
	int a[2][3] = { {11,12,13},{21,22,23} };
	func(a,2);//2表示数组a的行数
	return 0;
}

运行结果如下:

p[00] = 11      p[01] = 12      p[02] = 13
p[10] = 21      p[11] = 22      p[12] = 23

C:\code\day\x64\Debug\day.exe (进程 14632)已退出,代码为 0。
按任意键关闭此窗口. . .
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值