在c语言中二维数组在内存中的存放顺序是

2021-01-13 19:54:21 字数 5878 阅读 7297

1楼:倒霉熊

二维数组在c++中存储,一般是按行存储的,就是将一行当作一维数组进行存储。

例如:a[2][2]这个二维数组,其在内存中存储顺序为:

a[0][0] a[0][1] //先存储第一行a[1][0] a[1][1] //再存储第二行。

假设是32位系统,整型占4个字节,则其在内存的形式为:

a[0][0]

a[0][1]

a[1][0]

a[1][1]

2楼:秋风枝头

二维数组的元素在内存中是依次存放的,也就是说内存地址是连续的

例如 int array[2][2]=,};

内存中依次存放着:1 2 3 4.

在c语言中,二维数组元素在内存中的存放顺序是____。(

3楼:非常可爱

在c语言里二维数组元素在内存中是按行存放的。

二维数组a[m][n],这是一个m行,n列的二维数组。设a[p][q]为a的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:

loc(a[i][j]) = loc(a[p][q]) + ((i p) * n + (j q)) * t;

按“列优先顺序”存储时,地址计算为:

loc(a[i][j]) = loc(a[p][q]) + ((j q) * m + (i p)) * t;

存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。

扩展资料

c++动态二维数组:

以整形为例,row为行数,col为列数

int **data;//存储二维数组的指针(指向指针的指针。date=x[0][0]的地址。这样标会更好。因为sizeof(date)结果为4不可能存下二维数组)。

//以下实现如何申请内存

data = new int *[row];

for (int k = 0; k < row; k++)

//赋值跟普通二维数组一样 例如

data[0][0] = 5; //将二维数组1行1列(c++中称为0行0列)赋值为5

//删除内存

for (int i = 0 ; i < row; ++i)

delete data;

4楼:进理秦刚捷

自己用vc++6.0作了测试,**如下:

输出结果如下:

可见,此二维数组在内存中按照如下顺序存放:

a[0][0]

a[0][1]

a[1][0]

a[1][1]

a[2][0]

a[2][1]

5楼:匿名用户

在c语言中,二维数组元素在内存中的存放顺序是(按行存放)即在内存中线顺序存放第一行的元素,再存放第二行的元素。

6楼:匿名用户

假设数组是a[m][n],并且假定系统为其分配的是一整块内存,那么元素在内存中存放的顺序依次是:

a[0][0],a[0][1].....a[0][n-1],a[1][0],a[1][1].....a[1][n-1],a[2][0],a[2][1].....

a[2][n-1].......

a[m-1][0],a[m-1][1].....a[m-1][n-1]

共mxn个元素。请注意,分行/分列是人为的,只是为了便于从逻辑上描述,实际上每一个元素的起始地址,从左到右,再到下一行的最左边,都是顺序增加的。

下面是用来验证上述元素顺序的一个简单小程序以及运行结果。

#include

int main()

p=&a[0][0];

for (i=0;i<12;i++)

return 0;

}程序运行结果:

a[0][0]=2

a[0][1]=3

a[0][2]=4

a[0][3]=5

a[1][0]=4

a[1][1]=6

a[1][2]=8

a[1][3]=10

a[2][0]=6

a[2][1]=9

a[2][2]=12

a[2][3]=15

*(p+0)=2

*(p+1)=3

*(p+2)=4

*(p+3)=5

*(p+4)=4

*(p+5)=6

*(p+6)=8

*(p+7)=10

*(p+8)=6

*(p+9)=9

*(p+10)=12

*(p+11)=15

7楼:友人改变自己

在c语言中,二维数组元素在内存中的存放顺序是 先行后列

在c语言中,二维数组元素在内存中的存放顺序是 a按行存放 b按列存放 c由用户自己定义 d由编译器决定

8楼:郁筱羽

二维数组在内存中按行存放。

二维数组在c语言中的定义为:int a[x][y]。具体理解为二维数组a,有x行数据,每行数据有y个。

解释:当我们在进行数据的存取时,在无x的条件下不可能取出值。但是在没有y的条件下,可以通过地址取出x行的某个值。

当我们知道x的值,代表我们能确定这一行的首地址,因为二维数组按照行存放,所以第x行的数据地址关系排列递增的。

反证法:如果二维数组按列存放,则我们知道y值,可以确定首地址的值,去进行值得存取。显然由于c语言不支持这样的方式,所以c语言中二维数组按照行存放。

9楼:喵星球的大橘

c语言中,二维数组

元素在内存中是按行存放的。

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组在概念上是二维的,即是说其下标在两个方向上变化, 下标变量在数组中的位置也处于一个平面之中, 而不是象一维数组只是一个向量。

但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。

另一种是按列排列, 即放完一列之后再顺次放入第二列。在c语言中,二维数组是按行排列的。

例如:float a[3][4],b[5][10]; 定义a为3*4(3行4列)的数组,b为5*10(5行10列)的数组。注意,不能写成 float a[3,4],b[5,10]; 具体可以表示:

a[3][4]=,, }

扩展资料:

1、表示方法:

数组元素也是一种变量, 其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素的一般形式为:

数组名[下标] 其中的下标只能为整型常量或整型表达式。如为小数时,c编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。

数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。

2、赋值方法:

初始化赋值的一般形式为:static类型说明符数组名[常量表达式]=; 其中static表示是静态存储类型, c语言规定只有静态存储数组和外部存储数组才可作初始化赋值。在中的各数据值即为各元素的初值, 各值之间用逗号间隔。

例如:static int a[10]=; 相当于a[0]=0;a[1]=1...a[9]=9;

3、使用规则:

一、数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

二、数组名的书写规则应符合标识符的书写规定。

三、数组名不能与其它变量名相同。

四、可以只给部分元素赋初值。当中值的个数少于元素个数时,只给前面部分元素赋值。例如:

static int a[10]=;表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

五、只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]=;而不能写为:

static int a[10]=1;(请注意:在c、c#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。)

六、若不给可初始化的数组赋初值,则全部元素均为0值。

七、假如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]=; 可写为:

static int a=;动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。

10楼:匿名用户

答案为a。

关于c语言中的数组存放顺序是这样的:

假设有数组如下:

intx=;

charca[5]=;

数组名即代表数组的地址,数组的地址==数组名(ca)==数组的首元素的地址&ca[0]

在内存中,内存从大到小进行寻址,为数组分配了存储空间后,数组的元素自然的从上往下排列存储,整个数组的地址为首元素的地址。

模拟该数组的内存存储细节如下:

注意:字符在内存中是以对应ascii值的二进制形式存储的,而非上表的形式。

在这个例子中,数组x的地址为它的首元素的地址0x08,数组ca的地址为0x03。

在二维数组中a[y][x],其中x下标表示的是行,y下标表示的是列,而看上图,是以x下标为优先顺序存储的,因此,答案是a:按行存放。

11楼:匿名用户

#include

int main(),};

for (int i = 0; i < 2; i++)}return 0;

}输出结果:

a[0][0] 的地址

0028fef8

a[0][1] 的地址 0028fefc

a[1][0] 的地址 0028ff00

a[1][1] 的地址 0028ff04

process returned 0 (0x0) execution time : 0.657 s

press any key to continue.

懂了吗?

12楼:风信标

当然是按行存放,而且是紧密存放

c语言中二维数组在内存中是按什么优先存放的?

13楼:二蛋的哥哥哥

c语言中

二维数组是按行优先存储的

即 在内存中存一个二维数组时 先把数组中第一行的数组元素存完 再接着存下一行的 直到存完。

ps:定义一个二维数组 如 int a[m][n] 该数组为m行 n列的矩阵,在内存中 这样顺序存的:

a[0][0] a[0][1] ... a[0][n-1] a[1][0] a[1][1]...

不知道是不是帮到你的忙了望采纳

14楼:匿名用户

比如a[2][3];的存放顺序是:

a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]

15楼:米呀你

c语言数组是行优先的

c语言中二维数组在内存中怎样存储?

16楼:匿名用户

严格意义上说不存在二维数组,只是数组里的每个元素是一个一维数组,而内存是一段连续的空间,根据你申请一个变量的顺序按地址从低到高排,所以二维数组不可能像一个矩阵那样在内存中排列,这就涉及到它是按行依次往下排,还是按列往下排,而在c++中是按行,既 int a[2][2]

a[0][0]

a[0][1]

a[1][0]

a[1][1]

c语言中三维数组的赋值问题,C语言中三维数组的赋值问题

1楼 匿名用户 int limit 4 5 2 你这样定义是 int limit 20 2 。int limit 4 5 2 应该是 int limit 4 5 2 c语言 三维数组赋值给二维数组,为什么可以这样?里面的数值不会改变了吗? 2楼 你的数组a其实仍然是二维数组,因为你给的值显然是一个二...

C语言用冒泡法对一维数组中数按降序进行排列

1楼 自我编程 include int main int i j num for i 0 i 10 i 2楼 原姑娘 int a 10 存储用于排序的10个数 int i int temp int label do label 0 for i 0 i 9 i if a i 0 用c语言编写,输入10...

c语言编写排序函数,实现对主函数中数组的升序排序

1楼 黑色翅膀 飞翔 void bubble sort int a int n p2 p1 2楼 麻元豆花 经典的两个排序 1 选择排序 include main for i 0 i 5 i printf 3d a i 2 冒泡排序 include main for i 0 i 5 i printf...