定义的二维数组为全局变量,在主函数中有多个子函数要用到它。请问下大家,子函数中计算的此二维数组的值间能传递么?还是也需要调用呢?~~
可以传引用或者指针,或者定义为全局变量。那就直接用不用传了。
你用全局变量,每个函数里面都可以改啊。
传递数组地址或指针,C中没有引用
全局的直接访问就行了,就是要注意不要把里面的数据乱改,导致读取出问题
你使用全局变量,每个函数都可以去访问它并且修改它,会导致读写不一致!能少用全局变量,还是少用!
void fenpei(FILE *ffp)
{int i,j,k,l;
for(i=0;i<popsize;i++)
{
for(j=0;j<M;j++)
{
for(k=0;k<N;k++)
{
for(l=0;l<N;l++)
{
if(a[j][k]==oldpop[i].chrom[l])
** J[j][l]=1;**
else
** J[j][l]=0;**
}
}
}
}
}
void calculateobjectfitness() //计算染色体个体适应值
{
int i,j,s,r,x;
int H[M];
int u[N]={1,1,2,1,3,1,1,2,1,2,1,1};
int v[N];
for(i=0;i<popsize;i++)
{
oldpop[i].fitness=0.0;
for(s=0;s<N;s++)
{
r=oldpop[i].chrom[s]-1;
v[s]=u[r];
}
for(j=0;j<M;j++)
{
int p=0;
while**(J[j][p]!=1**&&p<12)
{
p++;
}
x=1;
H[j]=v[p];
while(x<T[j]&&p<12)
{
p++;
H[j]=H[j]+v[p];
if(**J[j][p]==1**)
x++;
}
oldpop[i].fitness=oldpop[i].fitness+H[j]*c[j]; //个体适应度计算
}
}
}
题目中说的两个子函数如上,void fenpei(FILE*ffp),和void calculate(),
目标是想把fenpei()计算得到的 J[][] 这个二维数组的值传递到下个子函数calculate()中, J[][]已经定义成全局变量了,可是数值却传递不过去,整个主函数中只有这两个子函 数有涉及到J[][]的计算。。。。还是很疑惑的~