Matlab与C混合编程之数组传递问题

首先说明一点,数组在Matlab和C中的存储方式是不同的,前者是按列存储,后者是按行存储。举个例子,对于一个数组A = [1, 2, 3; 4, 5, 6], Matlab存储顺序是1, 4, 2, 5, 3, 6,而C中是1, 2, 3, 4, 5, 6. 下面说下在混合编程时Matlab中的数组传递到C中想获取第i行j列的数怎么取。
matlab数据可以通过mxGetPr传递到c中,且mxGetM和mxGetN能分别获取矩阵的行和列,对于数组A,则M = 2, N = 3;那么第i行第j列数据索引为(j*M+i),这里很多人会有疑问,不是说C和Matlab中数组存储方式不同吗,那么在C中索引应该为(i*N+j)呀。其实,在数组从Matlab传递到C的时候,首先会把它转化成一维的数组,那么这种按列存储的数组就变成下面的形式


这里写图片描述

每个方格代表一列,且一共有N列,每个里面含有M个数据,其实这种形式就是Matlab的存储方式,那么Matlab将这种形式的数据传递给C,可想而知在C中对该数组进行索引操作其实跟Matlab中是一样的,不需要转化成C中存储的形式来考虑。

相关文章
相关标签/搜索