二维数组、指针详解

本文深入解析二维数组和指针的关系,通过实例代码详细阐述了二维数组的表示及与指针的交互原理,包括如何正确赋值、指针的数据类型及与数组对应关系,适合初学者和进阶读者理解C/C++中复杂的数据结构。

二维数组、指针详解:

目录

二维数组、指针详解:

1.研究二维数组的表示。

2.现在研究关于二维数组和指针的关系


1.研究二维数组的表示。

首先,用代码运行进行测试,验证的相关结果,

// C.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;



int main()
{
	int a[3][4] = { { 1,  3,  5,  7},
	                { 9, 11, 13, 15}, 
	                {17, 19, 21, 23}
	              };


	cout <<"   a    "<< endl;
	cout << a << endl << endl;


	cout << "   a[0]           *(a+0)          *a" << endl;
	cout << a[0] << "        " << *(a+0) << "        " << *a << endl << endl;


	cout << "   &a[1]           a + 1       " << endl;
	cout << &a[1] << "        " << a + 1 << endl << endl << endl;


	cout << "   a[1]           *(a + 1)       " << endl;
	cout << a[1] << "        " << *(a + 1) << endl << endl;


	cout << "   a[1] + 2        *(a + 1) + 2       " << endl;
	cout << a[1] + 2 << "        " << *(a + 1) + 2 << endl << endl << endl;


	cout << " *(a[1] + 2)      *(*(a + 1) + 2)       " << endl;
	cout <<"   "<<    *(a[1] + 2) << "               " << *(*(a + 1) + 2) << endl << endl;





	return 0;
}

得到结果:

由此可以得出如下结果【仔细看清池一下的表格】:

虽然打印出来的结果一样,但是其含义不同,其数据类型可能不一样。且指针接收的值,不是说传递一个地址进去就可以得。还要其类型对应的上。指针之所以为派生类型,是因为其必须依靠基本数据类型才能够使用(参见本人的这篇博客数据类型、存储结构、static、extern)。

二维数组a有关的指针
 含义

地址

数据类型
a二维数组名,指向一维数组a[0],即0行的首地址008FFAA4int (*)[4]
a[0],  *(a+0), *a0行0列的地址008FFAA4int *
&a[1],  a+11行首地址 008FFAB4int (*)[4]
a[1],  *(a+1)1行0列元素,a[1][0]的地址 008FFAB4int *
a[1]+2,  *(a+1)+21行2列元素,a[1][2]的地址008FFABCint *
*(*a[1]+2),  *(*(a+1)+2)1行2列元素,a[1][2]的值13 

 

 

 

 

 

 

 

2.现在研究关于二维数组和指针的关系

怎么赋初值呢? 给一个二维数组。

正确赋值方式:

方式一:int(*p)[4] = a; 

方式二:int(*p)[4] = &a[0];


容易错误的方式

错误一:int(*p)[4] = a[0];     

  

错误二:int(*p)[4] = &(a[0][0]);

那么由此可以得出结论,重点来了,敲黑板!!!【可以参考C程序设计 p250】
a[0], a[1], a[2]的类型为 int * 类型(指向整型变量);

而a的类型为 int (*)[4],指向 含有四个元素的 一维数组。

感觉此表比较重要,重点是容易理解。再回顾一遍。[和上面的是同一个表]

 

然后柑橘自己理解的,先要进一步提高的,可以参看下一篇文章,指向成员的指针运算符 .* 与 ->* 的区别。已确定自己是真的理解了。

注意!!!

注意!!!

注意!!!

要理解这两者之间的关系,关键是要自己能够理解:

关键在于弄清楚指针和数组对应的相应是几级指针对应几维数组。

关键在于弄清楚指针和数组对应的相应是几级指针对应几维数组。

关键在于弄清楚指针和数组对应的相应是几级指针对应几维数组。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值