69,368
社区成员
发帖
与我相关
我的任务
分享
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
p=(int **)malloc(4*sizeof(int *));
if (NULL==p) return;
for (i=0;i<4;i++) {
p[i]=(int *)malloc(5*sizeof(int));
if (NULL==p[i]) return;
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
p[i][j]=i*5+j;
}
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
printf(" %2d",p[i][j]);
}
printf("\n");
}
for (i=0;i<4;i++) {
free(p[i]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19
void fun(int a[][10]);//可以传一个列数为10的二维数组作为实参。。
#include "mex.h"
#include "math.h"
#define pi 3.14159
void parzen(const double kpdata[] ,double **result,int row,int col,int num)/*kpdata是matlab传进来的矩阵,matlab和C的存储方式不一样,我这里当一维数组存储来了,也不知道对不对,还有就是要返给matlab的result矩阵,行列都是matlab里面传进来的,这样可以灵活些,如果在这里面定义就只能针对一种矩阵了,num是传进来的kpdata矩阵的行数*/
{
double m1;
double m2;
double s;
double y;
//int num,row,col;
int i,j,a;
//result[row][col]={};
for (i=0;i<=row-1;i++)
{
for (j = 0;j<=col-1;j++)
{
y = 0;
for (a =0;a<=num-1;a++)
{
m1 = kpdata[a];
m2 = kpdata[a+num];
s = kpdata[a+2*num];
y = y+(1/(2*pi*s*s)*exp((-1/2)*(((i- m1)*(i-m1))/(s*s)+((j-m2)*
(j-m2))/(s*s))));
}
result[i][j] = y;
}
}
}
void mexFunction(int nlhs,mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
double **result,*kpdata;
//double *p1,*p2,*p3;
//double temp;
int M1,N1;
int row,col,num;
if(nrhs != 4)
mexErrMsgTxt("Four inputs required.");
else
{
M1 = mxGetM(prhs[0]); printf("M1=%d\n",M1);
N1 = mxGetN(prhs[0]); printf("N1=%d\n",N1);
row = mxGetPr(plhs[1]);
col = mxGetPr(plhs[2]);
num = mxGetPr(plhs[3]);
//row = *p1;
//col = *p2;
//num = *p3;
printf("row=%d\n",row);
printf("col=%d\n",col);
printf("num=%d\n",num);//检验
}
if(nlhs > 1)
mexErrMsgTxt("Too many outputs arguments.");
if(!mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]))
mexErrMsgTxt("Inputs must be all noncomplex double.");
plhs[0] = mxCreateDoubleMatrix(row,col,mxREAL);
kpdata = mxGetPr(prhs[0]);
result = mxGetPr(plhs[0]);
parzen(kpdata,result,row,col,num);
}
float ** a;
a=(float**)malloc(sizeof(float*)*row);
for(int i=0;i<row;i++){
a[i]=(float *)malloc(sizeof(float)*col);
}
这样写不容易出错,虽然效率没有1楼高