二维数组用于函数的参数
- 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。
按任意键关闭此窗口. . .