#include <stdio.h>
#include <malloc.h>
int main()
{
//这是一个二维数组
int arr[2][3] = {
{1,2,3},
{4,5,6}
}
//获取数组的尺寸和行列数:
int len = sizeof(arr) / sizeof(arr[0][0])
int row = sizeof(arr) / sizeof(arr[0])
int column = len / row
//知道了长度就可以使用calloc创建一个给定长度的数组(但用完记得要free)
int* new_arr = (int*)calloc(len, sizeof(int))
//将二维数组内的数值写入一维数组
for (int i = 0i <leni++)
{
//确定行号 用索引 i 除以(每行中有几列) 得到行数
int y = i / column// 如 第5个数 / 每列有3个,则为 4/3= “1”(第二行)
//确定列
int x = i % column// 如 第5个数 % 每列有3个,则为 4/3= 1余 “1” (第二个)
//将该数值写入新数组
if (!new_arr) { free(new_arr)return 1} //new_arr为空的验证,如果出现此错误则 return 1
else {
new_arr[i] = arr[y][x]
}
}
//输出新数组的数字
for (int i = 0i <leni++)
{
if (!new_arr) { free(new_arr)return 1}
else {
printf("%d ", new_arr[i])
}
}
free(new_arr)
}
对于二维数组,有行优先顺序和列优先顺序两种不同的存储方式。
二维数组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 个字节。
扩展资料:
数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。数组中的所有元素都具有相同类型(和结构类中的字段不同,它们可以是不同类型)。数组中的元素存储在一个连续性的内存块中,并通过索引来访问(和结构类中的字段不同,它们通过名称来访问)。
在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用 Variant 数组时更要格外小心,因为他们需要更大的存储空间。