指针数组是2维数组吗

指针数组是2维数组吗,第1张

不是。

指针指针数组是数组。它们用法很相似,但逻辑上并不是一体,从面象对象角度看,两者区别极大。

只从使用上说,指针很容易发生内存违规,而数组有限。

指针是栈 *** 作,而数组是堆 *** 作。

所以指针数组也不是2维数组。

首先需要更正一下。php二维数组的写法。

$erwei=array(

array('a','b','c','d'),

array('aa','bb','cc','dd')

);

//$erwei[0][1]的值为b

php中的数组中[]的数字表示索引,从0开始计数。如1表示第二个元素。数组是一层层嵌套的。

这样你应该明白三维数组的写法以及取值了吧。

例子:

$sanwei=array(

array(

array('aa','bb','cc','dd'),

array('aa1','bb1','cc1','dd1')

),

);

//$sanwei[0][0][1] 的值为 bb

补充:

单纯的讨论这个没有多大意义。同时php里面没有明确的定义。几维数组只是一种形式。关键在你实战中的需求。

7的是$shuzu[0][0][2][0]

a的是$shuzu[0][1][0]

这些东西,你直接写在php文件里面运行一下就出来了。实践最重要。不要光看教程。

本节介绍数组的使用,首先我们要搞明白什么是数组呢?数组就是能够存放一系列具有相同数据类型的数据元素的集合,在计算机中表示为内存地址连续的一片空间。

从图中可以看出,计算机给我们的数组分配的是地址连续的空间,而且我们的数组名称a,其实也就是一个指针变量,它指向的是我们数组的首元素的地址。下面引入下表的概念,什么是下表呢?可以看到,我们已经向计算机申请了一片地址,但是我们该如何访问它们呢,聪明的你也许会发现刚刚我们说a是数组的首地址,所以去除a地址中的元素就能访问数组的第一个元素了,不错,但是我们还没有介绍指针的概念,那么怎么访问第二个,第三个数组元素呢?我们通过数组下表来实现,比如说a[0]表示第一个元素,a[1]表示第二个元素 这里我们的下表统一的从0开始。这样一来我们就能够通过下表访问所有的数组元素了。

需要强调的是数组的大小总是比下表最大值多一,举例说明

虽然我们定义是使用了a[7]但是注意,这里的7只表示我们数组的规模,具体的7个元素,对应着数组下表a[0] a[1] a[2] a[3] a[4] a[5] a[6],注意没有a[7]哟。那么如果我们一不小心,使用了数组规模以内的下表会怎么样呢?这时系统会提示错误,也就是我们说的越界访问,系统是不允许的,就好比你家的羊走到了别人家的田地里吃草,这是不允许的。

下面给出一个数组使用的例子

还记得讲switch语句的时候的那个例子么, 输入一个整数,输入星期几。现在我们用数组实现,体会一下数组的感觉。

这里我们使用了一个string类型的数组,尽管string不是基本的数据类型,但是同样可以构成数组。上面这个例子的数组用法十分常见,这样做可以巧妙的避开了复杂的分支结构,使得我们的程序看上去更加清晰明了。

我们的数组的声明形式是什么样子的呢?声明一个数组,首先要给出我们数组的数据类型,也就是你数组里面打算存放什么类型的数据,比如 int 类型, 然后就是我们的数组名和中括号以及我们的数组的规模 a[7] ,也就是告诉计算机我们需要多少个元素空间。

所以声明语句为 int a[7];我们多举几个例子,体会一下。

还有一点需要注意,就是在声明的时候,我们中括号内的数组规模一定要是一个常量,不能是变量,尽管变量代表一个具体的值,也不可以。

以上我们介绍的是一维数组的情况,那么什么是多维数组呢?

首先简单介绍一下维数的概念,类比数学很好理解,我们的直线是一维的,平面是二维的,空间几何是三维的。当然我们生活的空间就是三维的。一般化的定义就是说,独立向量的个数,有几个独立向量,就是几维。好了那么如何理解二维数组呢,我可以这么理解,二维数组是两个一维数组的嵌套。

看下图

我们声明了一个3x3的数组b,其实就是声明了一个规模为3的一维数组b,只不过b中的每个元素又都是一个规模为3的一维数组。

很好理解吧。换一个角度考虑问题,学过矩阵的童鞋都知道,二维数组对应着二维矩阵。矩阵的每个元素也是有下表的,所以我们通过数组下表来表示每个元素,其中第一个下表表示行数,第二个下表表示列数。

下面给出二维数组的一个例子

三维及以上维数的数组与此类似。

下面说明一下数组的初始化

在声明数组的时候就可以对数组初始化

int scores[3][2] = { { 80, 92 }, { 85, 91 }, {90,98} };

仔细观察,这样是很规范的,因为我们通过括号进行了划分。

那么把括号去掉行不行呢?

int scores[3][2] = { 80, 92 , 85, 91 , 90,98 };

我们不妨跑一下试试

结果是一样的。所以在我们没有特殊说明的情况下,系统会优先选择最低维进行填充,即最右面的一维。本例看做3行2列的话,就先填充第一行,也就是先选择2个给第一行,再选2个给第二行。。。

当然如果初始化的数据一样,比如说把成绩初始值设为80,该怎么做呢?

int scores[3][2] = { 80, };

哎呀,和我们想要的结果不一样,会发现,如果没有明确给出值的话,系统默认初始化为0 那么如何达到全都是80的效果呢?对了,使用我们讲过的循环,这里显然for循环比较合适。

好了,数组就介绍这么多,大家多应用,熟能生巧。记住合理使用数组能简化程序结构哟!

你的多维数组指的是几维呢

就拿二维给你举例子吧:$arr=(array(1),array(2));

先定义一个空数组:$a = array();

然后把你想要的结果放在这个数组中:$a = $arr[0][0];这个指向呢是你的二维数组中的第一个值 也就是:array(1);的值 ;至于你具体要的哪个值可以有条件的进行提取 。比如通过它的下标或者索引值 找到你要的内容;

char strs[3][20] = {};表示定义一个二维数组,有3行,每行20列。

strs[0] 存储"abc"的地址,可以当字符串使用。20列,要求字符串的长度不能超过20个字符(包括\0)

strs[1] 存储"123"的地址

strs[2] 存储"ABC"的地址

首先可以肯定的是无论几维的数组在内存中存储时都是连续的,但是数组每个元素在内存中的排列方式具体是按照什么的规则来排呢?这主要取决与编译器,一般有按行排,也有按列排,也有其他的一些排法。所以如果你想用指针表示一个数组中某一个元素的地址,关键还是要了解数组在内存中的具体排列方式。

c语言默认最多是二维数组;当然如果用指针自己分配内存的话可以自行进行计算,进行更多维的表示。

二维数组本质上是将数组作为数组元素的数组,称为数组的数组。为了形象化理解二维数组,通常将二维数组写成行和列的排列形式,通常被称为m行n列。

1、m:二维数组中包含多少个一维数组,是第一维,表示第几行;

2、n:一维数组中包含多少个元素,是第二维,表示第几列。

3、格式:类型修饰符 数组名[行数][列数] = {值,值2,值3,…};行数可以省,列数不可以省。

扩展资料:

高维数组:

数组下标在两个以上;三维数组:立体的层,行,列;

格式:类型修饰符 数组名[层数][行数][列数] = {值,值2,值3,…};

遍历三维数组需要三层循环;高维数组访问元素:数组名[下标][下标]…高维数组元素个数等于各个数的乘积;高维数组占用内存等于元素个数乘以单个元素所占空间。

参考资料来源:百度百科-二维数组

以上就是关于指针数组是2维数组吗全部的内容,包括:指针数组是2维数组吗、PHP三维数组、06.一维数组和多维数组等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9866432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存