C语言数组为什么按行优先存储

Python016

C语言数组为什么按行优先存储,第1张

c语言中 二维数组是按行优先存储的即在内存中存一个二维数组时先把数组中第一行的数组元素存完再接着存下一行的直到存完。ps:定义一个二维数组如inta[m][n]该数组为m行n列的矩阵,在内存中这样顺序存的:a[0][0]a[0][1]...a[0][n-1]a[1][0]a[1][1]...不知道是不是帮到你的忙了望采纳

#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 数组时更要格外小心,因为他们需要更大的存储空间。