我是靠谱客的博主 要减肥电源,最近开发中收集的这篇文章主要介绍c语言 matlab数组初始化,(转)Fortran、matlab 和 C语言中数组的存储方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Fortran和matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而c语言中的多维数组存储方式为行优先原则,内循环最好是行循环。下面介绍何为行优先存储,何为列优先存储。

例如二维数组Amn

0818b9ca8b590ca3270a3433284dd417.png

(1)行优先顺序

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

【例】二维数组Amn的按行优先存储的线性序列为:

a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn

行优先顺序推广到多维数组,可规定为先排最右的下标。

二维数组Amn地址计算公式(数组存储结构以C语言下标表示):

LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d

①LOC(a11)是开始结点的存放地址(即基地址)

②d为每个元素所占的存储单元数

(2)列优先顺序

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

【例】二维数组Amn的按列优先存储的线性序列为:

a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn

列优先顺序推广到多维数组,可规定为先排最左的下标。

二维数组Amn地址计算公式(数组存储结构以C语言下标表示):

LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d

下面是用c语言测试存储方式对计算效率的影响

Program1. 不按计算机规定的存储方式编程

#include "stdio.h"

#include "stdlib.h"

#include "time.h"

void main ()

{ int i,j;

float a[1000][5000];

clock_t beg, end;

double time;

beg=clock();

for (i=0; i<1000; i++) {

for (j=0; j<5000; j++) {

a[i][j]=0.5;  }

for (j=0; j<5000; j++) {

for (i=0; i<1000; i++) {

a[i][j]=a[i][j]*a[i][j]+2.0*a[i][j]+10.0;  }

end=clock();

time=(double)(end-beg)/CLOCKS_PER_SEC;

printf("Compute time is %f secondsn",time);

}

Compute time is 0.063000 seconds

Program2.按计算机规定的存储方式编程

#include "stdio.h"

#include "stdlib.h"

#include "time.h"

void main ()

{ int i,j;

float a[1000][5000];

clock_t beg, end;

double time;

beg=clock();

for (i=0; i<1000; i++) {

for (j=0; j<5000; j++) {

a[i][j]=0.5;  }

for (i=0; i<1000; i++) {

for (j=0; j<5000; j++) {

a[i][j]=a[i][j]*a[i][j]+2.0*a[i][j]+10.0;  }

end=clock();

time=(double)(end-beg)/CLOCKS_PER_SEC;

printf("Compute time is %f secondsn",time);

}

Compute time is 0.046000 seconds

最后

以上就是要减肥电源为你收集整理的c语言 matlab数组初始化,(转)Fortran、matlab 和 C语言中数组的存储方式的全部内容,希望文章能够帮你解决c语言 matlab数组初始化,(转)Fortran、matlab 和 C语言中数组的存储方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部