我在C中的原型函数遇到了一些问题。它应该是更新的,所以最终整个数组都充满了'C'。但是,它每次调用时都会一直重置,因此板上最多只有1'C'。如果有人能告诉我我做错了什么,我将非常感激!
**此外,a是一个标志,如果1,该区域应在位置[b] [c]中显示“C”。
void UpdateMap(a,b,c){
int i,j;
char showlist[MAP][MAP];
if (a==1){
showlist[b][c]='C';
}
for(i=0;i<MAP;i++){
printf("\n");
for (j=0;j<MAP;j++){
if (showlist[i][j]!='C'){
showlist[i][j]='-';
}
printf("%c\t", showlist[i][j]);
}
}
}
编辑:对不起编程和本网站的新手。所以不确定我是否在正确的区域做出回应,或者是否有人会看到这一点。
无论如何我将我的显示列表[MAP] [MAP]更改为Nshowlist [MAP] [MAP],因为根据我的理解,如果我在main中有另一个showlist [MAP] [MAP]会产生问题。
在我的函数原型中(我不明白这个术语是怎么错的?)我有:
主要是它称之为: UpdateMap([l-1] [m-1] .playerOwns,l-1,m-1,Nshowlist [MAP] [MAP]);
然后我之前发布的内容改为: void UpdateMap(int a,int b,int c,char Nshowlist [MAP] [MAP]){
int i,j;
但现在它停止工作了?有人可以告诉我为什么吗? void UpdateMap(int a,int b,int c,char Nshowlist [MAP] [MAP]);
答案 0 :(得分:1)
由于char showlist[MAP][MAP];
是在本地声明的,因此会将其分配为自动变量,并且无法保证您在之前的调用中获得您放入其中的数据:它的未定义的行为。
您必须延长此变量的生命周期,例如通过在函数外声明并将其作为参数传递。我的建议(其他参数为int
,因为您使用了传统的方式来声明它们,这是不推荐的)
void UpdateMap(int a,int b,int c,char showlist[MAP][MAP]){
int i,j;
然后宣布
char showlist[MAP][MAP];
在调用者的某个地方,并将showlist
作为函数的最后一个参数传递。 showlist
变量现在已经超出了函数的生命周期,并且保留了之前调用的内存(前提是您不要在调用者中执行相同的本地声明,而另一个上层例程调用该声明当然!)