全球旧事资料 分类
20141014195251关于C语言的二维数组与指针的关系的问题,是一个很复杂并且深刻的问题。在这里总结一下静态二维数组、动态二维数组、指针引用、下标引用之间的关系。如下:概述在C语言中,对于静态数组,数组维数再多,它也是一维存储的,它的地址也是相当于一重指针(其实数组名只是一个标志而已,它标志了该数组第一个元素的地址,并不分配内存空间)。对于动态的多维数组,是多维存储的,它的数组的地址就相当于多重指针,需要分配内存空间,并且每一级指针都要分配内存空间。在定义静态多维数组时,它的列数是固定的,那么C编译器可以很容易计算出各个元素的位置,而无需存储元素的指针。而动态多维数组则要存储相应的指针。一维和多维的不同,就是静态多维数组和动态多维数组的本质区别。一重指针只是指针,而多重指针是指针的指针的。于此,我们就知道,多重指针不能用于静态多维数组,而动态多维数组也不应该使用一重指针。静态二维数组、动态二维数组的分配和元素的引用静态二维数组:编译时分配,并且是一维存储。引用时请注意:可以使用类似于aij的下标引用。也可以使用指向数组的指针来引用,此时可以写为类似于pij的形式。也可以使用一重指针来引用,此时可以写为类似于pi
j的形式。不可以使用二重指针来引用。动态二维数组:都是运行时分配,可以是真正的多维,也可以是一维,具体如下:可以生成真正的二维空间,即先malloc出一个指针数组,然后再malloc出多个尺寸为总结1、指针和数组名是不同的。国内很多教材在这点上,存在误导。
一维空间,让这些指针分别指向它们。这种形式,可以使用二重指针p,用该指针引用时,可以写为类似于pij的形式,也可以写为类似于pij的形式。让这些指针分别指向此m
一维空间的不同段。此时,也可以使用二重指针来引用其中的元素,用法与前一种相同。的动态多维数组含义并不包含这种分配方法,都是指真正的多维)。此时,使用方式类似于静态二维数组,但是,当你使用指向数组的指针来引用数组元素时,就有一些限制,因为指向数组的指针只能是指向确定列数的数组,列数只能是常量表达式。注:对于C99新增的变长数组,另请考虑。
也可以先malloc出一个指针数组,然后只malloc出一个尺寸为m
的一维空间,然后
也可以只malloc出一块一维空间,用于多维数组(前面概述部分为了简化问题,其中
r
好听全球资料 返回顶部