概述
文章目录
- 线性存储
- 种类
- 行优先存储
- 列优先存储
- 程序验证: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;
}
运行结果:
最后
以上就是呆萌柚子为你收集整理的C语言 二维数组的线性存储特性的全部内容,希望文章能够帮你解决C语言 二维数组的线性存储特性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复