在C语言中,二维数组元素在内存中的存放顺序是 A按行存放 B按列存放 C由用户自己定义 D由编译器决定
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组在概念上是二维的,即是说其下标在两个方向上变化, 下标变量在数组中的位置也处于一个平面之中, 而不是象一维数组只是一个向量。
但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。在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,2,3,4},{5,6,7,8},{9,10,11,12} }
扩展资料:
1、表示方法:
数组元素也是一种变量, 其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素的一般形式为:数组名[下标] 其中的下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。
2、赋值方法:
初始化赋值的一般形式为:static类型说明符数组名[常量表达式]={值,值……值}; 其中static表示是静态存储类型, C语言规定只有静态存储数组和外部存储数组才可作初始化赋值。在{ }中的各数据值即为各元素的初值, 各值之间用逗号间隔。例如:static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;
3、使用规则:
一、数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。
二、数组名的书写规则应符合标识符的书写规定。
三、数组名不能与其它变量名相同。
四、可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
五、只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;(请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。)
六、若不给可初始化的数组赋初值,则全部元素均为0值。
七、假如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5}; 可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。
参考资料来源:百度百科-二维数组
二维数组在内存中按行存放。
二维数组在c语言中的定义为:int a[x][y]。具体理解为二维数组a,有x行数据,每行数据有y个。
解释:当我们在进行数据的存取时,在无x的条件下不可能取出值。但是在没有y的条件下,可以通过地址取出x行的某个值。
当我们知道x的值,代表我们能确定这一行的首地址,因为二维数组按照行存放,所以第x行的数据地址关系排列递增的。
反证法:如果二维数组按列存放,则我们知道y值,可以确定首地址的值,去进行值得存取。显然由于C语言不支持这样的方式,所以C语言中二维数组按照行存放。
扩展资料:
二维数组的输入:
int a[2][3];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cin>> a[i][j];
}
}
通过for循环确定x的值,在通过for循环确定y的值。
答案为A。
关于C语言中的数组存放顺序是这样的:
假设有数组如下:
Int x[]={1,2};
Char ca[5]={‘a’,‘A’,‘B’,‘C’,‘D’};
数组名即代表数组的地址,数组的地址==数组名(ca)==数组的首元素的地址&ca[0]
在内存中,内存从大到小进行寻址,为数组分配了存储空间后,数组的元素自然的从上往下排列存储,整个数组的地址为首元素的地址。
模拟该数组的内存存储细节如下:
注意:字符在内存中是以对应ASCII值的二进制形式存储的,而非上表的形式。
在这个例子中,数组x的地址为它的首元素的地址0x08,数组ca的地址为0x03。
在二维数组中a[y][x],其中x下标表示的是行,y下标表示的是列,而看上图,是以x下标为优先顺序存储的,因此,答案是A:按行存放。
int main()
{
int a[2][2] =
{
{1,2},
{3,4}
};
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
printf("a[%d][%d] 的地址 %p\n", i, j, &a[i][j]);
}
}
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.
懂了吗?