一.二维数组

1.定义:

//方法一
int arr1[2][3];
//方法二
int arr2[2][3] = { {1,2,3},{4,5,6} };
//方法三
int arr3[2][3] = { 1,2,3,4,5,6 };
//方法四
int arr4[][3] = { 1,2,3,4,5,6 };

2.数组名称
作用:查看二维数组所占内存空间大小;获取二维数组首地址。

int arr[2][3] = { {1,2,3},{4,5,6} };
cout << "二维数组所占内存大小:" << sizeof(arr) << endl;
cout << "二维数组数组元素个数:" << sizeof(arr) / sizeof(arr[0][0]) << endl;
cout << "数组首地址:" << (int)arr << endl;
cout << "数组第一个元素地址:" << (int)&arr[0][0] << endl;
cout << "数组第一行地址:" << (int)(arr[0]) << endl;
cout << "数组第二行地址:" << (int)(arr+ 1) << endl;
cout << "数组第二行地址:" << (int)(arr[1]) << endl;
cout << "数组第二个元素地址(a[0][1]):" << (int)&arr[0][1] << endl;
//首地址+4*列*行
cout << "下一地址(注意与数组首地址区分):" << (int)( & arr + 1) << endl;

结果:
在这里插入图片描述

二.二维指针

1.申请二维指针

//申请二维数组
int row = 4, col = 5;
int** a = new int*[row];//先申请5行空间
for (int i = 0; i < row; i++) {
	a[i] = new int[col];//为每一行申请空间
}

2.释放二维指针

//释放空间
for (int i = 0; i < row; i++) {
	delete[] a[i];//释放每一行
}
delete[] a;

3.在内存中存储
在这里插入图片描述

三.数组指针

int (*p)[2] = new int[3][2];//数组指针

定义:
数组指针:顾名思义,“数组的指针”,是一个指针。
()的优先级高于【】,因此*先与p组成指针,然后在与【】构成数组指针。形成一个,指向含有两个int型数据数组的指针。

使用:

	int arr[5] = { 0,1,2,3,4 };
	int(*p1)[5] = &arr;//数组首地址(不是数组元素首地址)
	for (int i = 0; i < 5; i++)
		cout << (*p1)[i] << "\t";
	cout << endl;
	cout << endl;

	int a[3][5] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 };//二维数组
	p1 = a;//二维数组a首地址
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 5; j++) {
			cout << (*(p1 + i))[j] << '\t';
		}
		cout << endl;
	}

在这里插入图片描述

由于p1存储的是数组的首地址。因此,在执行p1+1时,相当于arr+5.

在内存中存储:
在这里插入图片描述

四.指针数组

int* p[3];//指针数组

定义
指针数组,顾名思义“指针的数组”,即存放指针的数组。
因为【】的优先级要比 * 要高,所以 p 先与【】结合,构成一个数组的定义,数组名为 p,而int修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 int 类型数据的指针,

使用
创建和申请空间

	int* p[3];//指针数组
	//申请空间
	for (int i = 0; i < 3; i++) {
		p[i] = new int[4];//为每行申请4个int
	}

赋值

	int* p1[3];
	int a[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
	for (int i = 0; i < 3; i++)
		p1[i] = a[i];//把二维数组a第i行给p1
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 4; j++)
			cout << p1[i][j] << '\t';
		cout << endl;
	}

在这里插入图片描述

	const char* s[3] = { "abc","def","ghi" };
	for (int i = 0; i < 3; i++)
		cout << s[i] << endl;

在这里插入图片描述

在内存中存储
在这里插入图片描述
参考:
https://blog.csdn.net/men_wen/article/details/52694069
http://c.biancheng.net/view/335.html

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐