有人可以帮我解决这个问题:我有一行i,一维数组p和二维数组(矩阵)Q. 所以,问题是我必须使用Q中的第i行初始化一维数组p而不使用for循环。我怎么能这样做?
void simVarDiscr(int m, int *x, double *p){//m is the number of elements of x and p
int i;
for(i=0;i<m;i++){
x[i]=i;
init_genrand(254);//is a function from Mersenne-Twister algorithm
p[i]=genrand_int32()%m;
}
}
int LantMarkov(int m,double *pi0,float **Q){
int *s,k,j;double *p;
s=(int *)malloc(n*sizeof(int));
p=(double *)calloc(m,sizeof(double));
simVarDiscr(m,s,pi0);
j=s[0];
for(k=0;k<n;k++){
memcpy(p, Q[j], m);
simVarDiscr(m,s,p);
j=s[k];
}
答案 0 :(得分:0)
答案取决于对您的问题的解释:“使用Q中的第i行初始化一维数组p而不使用for循环” - 因为您的代码没有使用来自{{的行初始化p
1}}使用Q
循环。
for
循环可以替换为for
循环甚至是递归。
如果您更改while
或p
的类型以使其兼容(例如Q
),则可以使用float
从{复制memcpy
{1}} Q
;我不确定这会对您有所帮助,因为您的代码中已经有一些p
(有2个错误,因此无效)。
您可以删除memcpy
的内存分配,并将其指向p
中的一行;这不需要循环。例如:
-
Q