C语言 二维数组的线性存储特性

简介: C语言 二维数组的线性存储特性

线性存储


由于计算机的内存是一维的,多维数组的元素应排成线性序列后存入存储器。数组一般不做插入和删除操作,即结构中元素个数和元素间的关系不变。所以采用顺序存储方法表示数组。


种类


行优先存储


将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。


如:二维数组A[m][n]按行优先存储的线性序列为:


A[0][0]、A[0][1]…A[0][n]、A[1][1]、A[1][1]…A[1][n]…A[m][n]、A[m][1]…A[m][n]


在PASCAL和C语言中数组按行优先顺序存储。


列优先存储


将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。


如:二维数组A[m][n]按列优先存储的线性序列为:


A[0][0]、A[1][0]…A[m][0]、A[0][1]、A[1][1]…A[m][1]…A[m][1]、A[0][n]…A[m][n]


FORTRAN(几乎见不到这门语言了)语言中,数组按列优先顺序存储。


程序验证:C语言二维数组线性存储


看下面代码,通过对下面两种二维数组进行元素地址打印和元素值打印,你会发现,各个元素之间正好隔了一个当前数据类型的步长(下面代码是int类型,所以步长是4)


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void PrintArray(int* arr, int len) {
  for (int i = 0; i < len; i++) {
    printf("%d ", arr[i]);
  }
  printf("\n");
}
//二维数组的线性存储
void test() {
  int arr[][3] = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
  };
  int arr2[][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  int len = sizeof(arr2) / sizeof(int);
  //如何证明二维数组是线性的?
  //通过将数组首地址指针转成Int*类型,那么步长就变成了4,就可以遍历整个数组
  int* p = (int*)arr;
  printf("打印 arr 数组各个元素地址:\n");
  for (int i = 0; i < len; i++) {
    printf("%xd ", &p[i]);
  }
  printf("\n");
  int* p2 = (int*)arr2;
  printf("打印 arr2 数组各个元素地址:\n");
  for (int i = 0; i < len; i++) {
    printf("%xd ", &p2[i]);
  }
  printf("\n");
  printf("打印整个数组元素:\n");
  for (int i = 0; i < len; i++) {
    printf("%d ", p[i]);
  }
  printf("\n");
  printf("打印整个 arr 数组:\n");
  PrintArray((int*)arr, len);
  printf("打印整个 arr2 数组:\n");
  PrintArray((int*)arr2, len);
}
int main()
{
  test();
  return 0;
}


运行结果:


相关文章
|
26天前
|
存储 数据处理 C语言
C语言二维数组
C语言二维数组
14 0
|
1月前
|
C语言
【C语言】利用数组处理批量数据(一维数组和二维数组)
【C语言】利用数组处理批量数据(一维数组和二维数组)
|
1月前
|
存储 小程序 编译器
C语言中数据类型的存储
C语言中数据类型的存储
|
1月前
|
C语言
C语言---二维数组&&指针
C语言---二维数组&&指针
13 0
|
1月前
|
C语言
C语言-----用二维数组解决菱形的打印问题
C语言-----用二维数组解决菱形的打印问题
19 0
|
1月前
|
存储 C语言
遍历二维数组C语言,小白必看的绝绝子技巧!
遍历二维数组C语言,小白必看的绝绝子技巧!
|
1月前
|
存储 C语言 芯片
嵌入式数据传输及存储的C语言实现
嵌入式数据传输及存储的C语言实现
25 0
|
2月前
|
存储 编译器 C语言
C语言:数据在内存中的存储形式
C语言:数据在内存中的存储形式
|
1月前
|
存储 C语言
C语言--------数据在内存中的存储
C语言--------数据在内存中的存储
25 0
C4.
|
1月前
|
存储 C语言
C语言怎样定义和引用二维数组
C语言怎样定义和引用二维数组
C4.
14 0