① 数组的大小数组中能够存放多少个数组元素
这个问题 应该这么说:如果定义的是一个简单类型的数组,例如:int my_int_array[100] ; 那么最多能够存放:100个元素,且每个元素的详细大小为:sizeof(int) ;数组的合法存取下标为:my_int_array[0] -- my_int_array[99],如果超过了这个范围,那么就会产生数组越界,程序就会出现错误了。
如果定义的是一个复合类型的数组,例如:结构数组。举例如下:
struct myself_datatype
{
char name[40] ;
int sex ;
int age ;
} myself_data ;
myself_data my_struct_array[100] ;
那么结构数组中的每一个元素所占的空间大小就是:sizeof(myself_data.name) + sizeof(myself_data.sex) + sizeof(myself_data.age) 。
② 在C中,多维数组元素的存储顺序是按照什么原则进行
例如二维数组,int
digi[2][2],可以理解为此数组有二行二列,即int
digi[行][列]
排列顺序:排完第一行,再排第二行,则有
第一行:
digi[0][0]
digi[0][1]
第二行:
digi[1][0]
digi[1][1]
…
可以理解成,行在前面较列(后面)大,列排序由小到大,排完第一行在排第二行,依此类推。
……又例如三维数组,int
Iarr[2][2][2],可以理解为,2排2行2列,(比喻成班级成员可分为,小组,组,一班)……
显然排序,当然第一排排完后再到第二排最后到第三排,但是排内部又有行,当然第一行排完后再到第二……,列同样如此,
简单理解:排>行>列,(大到小)
所以上面排序为:
第一排
第一行
Iarr[0][0][0]第一列
Iarr[0][0][1]第二列
第二行
Iarr[0][1][0]第一列
Iarr[0]
[1][1]第二列
……
第二排
第一行
Iarr[1][0][0]第一列
Iarr[1][0][1]第二列
第二行
Iarr[1][1][0]第一列
Iarr[1][1][1]第二列
③ 能详细描述一下顺序存储的数组元素的存放地址的计算方法吗
假设数组各维的下界是不是1,二维数组A(mn)按“行优先顺序”存储在内存中,假设每个元素占用d个存储单元。元素a(ij)的存储地址应是数组的基地址加上排在a(ij)前面的元素所占用的单元数。因为a(ij)位于第i行、第j列,前面i-1行一共有(i-1)×n个元素,第i行上a(ij)前面又有j-1个元素,故它前面一共有(i-1) ×n+j-1个元素。
因此,a(ij)的地址计算函数为:LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d。
同样,三维数组A(ijk)按“行优先顺序”存储,其地址计算函数为:LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p+(k-1)]*d。
上述讨论均是假设数组各维的下界是1,更一般的二维数组是A[c1..d1,c2..d2],这里c1,c2不一定是1。a(ij)前一共有i-c1行,二维数组一共有d2-c2+1列,故这i-c1行共有(i-c1)*(d2-c2+1)个元素,第i行上a(ij)前一共有j-c2个元素。
因此,a(ij)的地址计算函数为:LOC(aij)=LOC(ac1c2)+[(i-c1)*(d2-c2+1)+j-c2)]*d。
例如,在C语言中,数组各维下标的下界是0,因此在C语言中,二维数组的地址计算公式为:LOC(aij)=LOC(a00)+(i*(d2+1)+j)*d。
④ 数据结构中数组元素的起始地址和存储地址有什么区别
(1)数组A的存储量为6*8*6=288字节
(2)按行优先存放时,元素A1,4的起始地址、存储地址:1000+(1*8+4)*6=1072
(3)按列优先存放时,元素A4,7的起始地址、存储地址:1000+(7*6+4)*6=1276
数组元素的存储地址就是该元素在内存的起始地址
⑤ 一维数组在内存中的存放方式是怎么样的
一维数组在内存中的存放方式是:
1、硬盘上不可能运行程序的,必须在内存中运行。
2、低地址到高地址存储 。
3、数组元素通常也称为下标变量。
4、在C语言中,只能逐个地使用下标变量, 不能用一个语句输出整个数组。
5、int a[10]和t=a[6]分别是定义数组长度为10和引用a数组中序号为6的元素,6不代表数组长度。
(5)数组存储元素扩展阅读:
数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。
数组是用于储存多个相同类型数据的集合。
在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
⑥ 什么是数组数组元素与存储单元的对应关系是怎样的
数组就是存储一堆数据的存储结构。(可是是整数,可以是字母,甚至,多元数组还可以存储字符串)
数组里的元素是连续的。所以相邻的存储单元的存储地址是连着的。
这也是后面为什么指针可以来代替数组处理问题的原因。
比如a[0]和a[1]的存储单元地址是连续的
⑦ 二维数组元素在内存中的存放顺序是
二维数组元素在内存中的存放顺序是按行存放。
当进行数据的存取时,在无x的条件下不可能取出值。但是在没有y的条件下,可以通过地址取出x行的某个值。当知道x的值,代表能确定这一行的首地址,因为二维数组按照行存放,所以第x行的数据地址关系排列递增的。
如果二维数组按列存放,则知道y值,可以确定首地址的值,去进行值得存取。显然由于C语言不支持这样的方式,所以C语言中二维数组按照行存放。
(7)数组存储元素扩展阅读
常用的二维数组的表示方法
第一种是普通的二维数组的表示方法。
第二种是用一维数组来表示二维数组,从显示的元素地址可以看出,二维数组和一维数组表示的二维数组在内存中的储存方式其实是一样的,不过使用二维数组看起来要简单些,只要不用进行地址转换。
第三种表示是用指针数组。这种方法对各个元素大小不一样的情况下比较适用。
第四种方式为用指向指针的变量来表示。此种方式p是指向指针的指针,不能把普通的二维数组的首地址赋给它,可以把第三种方式中的数组指针的首地址赋给它,这种方式用的较少。