【发布时间】:2020-03-30 20:46:30
【问题描述】:
我有一个函数 loadmap(),它基本上从文件中加载网格。在其中,我动态创建了一个名为“mapa”的整数数组。
int loadmap(int *n) {
int i, j;
int **mapa;
int num;
char space;
int count = 0;
FILE *f;
f = fopen(SUBOR, "r");
fscanf(f, "%d%c", &num, &space);
while (space != '\n') {
count++;
fscanf(f, "%d%c", &num, &space);
}
mapa = (int **)malloc(pocet * sizeof(int *));
for (i = 0; i < pocet; i++) {
mapa[i] = (int *)malloc(pocet * sizeof(int));
}
rewind(f);
for (i = 0; i < pocet; i++) {
for (j = 0; j < pocet; j++) {
fscanf(f, "%d%c", &num, &space);
mapa[i][j] = num;
}
}
*n = count;
return **mapa;
}
然后我想主要使用返回的指向数组的指针作为其他函数的参数。我尝试将它存储在我能想到的各种变量中,但没有任何效果。这是我现在所拥有的。
int main() {
int **mapa;
int n;
int ki, kj;
**mapa = loadmap(&n);
printf("rozmer stvorcovej mapy: %d\n", n);
najdi_kopec(mapa, n, &ki, &kj);
printf("suradnice kopca: %d, %d\n", ki, kj);
zidi_kopec(mapa, n, ki, kj);
return 0;
}
我认为这让我最接近解决方案,因为它适用于需要编写程序的其余部分的方式,但这会产生 'uninitialized local variable 'mapa' used ' error 。我不确定我是否使用了正确的方法,我只是从 C 开始。您能否建议一些调整以使我有工作或完全使用其他工作方法?
谢谢
--------- 编辑 ------------
添加其他函数的声明
void najdi_kopec(int **mapa, int n, int *ki, int *kj) {
int i, j;
*ki = *kj = 0;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (mapa[i][j] > mapa[*ki][*kj]) {
*ki = i;
*kj = j;
// printf("i: %d, j: %d, mapa: %d\n", *ki, *kj, mapa[*ki][*kj]);
}
}
void zidi_kopec(int **mapa, int n, int ki, int kj) {
int i, j, max;
while (ki != 0 && ki != n - 1 && kj != 0 && kj != n - 1) {
max = 0;
// sever
if (ki - 1 >= 0 && mapa[ki - 1][kj] > max &&
mapa[ki - 1][kj] < mapa[ki][kj]) {
i = ki - 1;
j = kj;
max = mapa[i][j];
}
// vychod
if (kj + 1 < n && mapa[ki][kj + 1] > max &&
mapa[ki][kj + 1] < mapa[ki][kj]) {
i = ki;
j = kj + 1;
max = mapa[i][j];
}
// juh
if (ki + 1 < n && mapa[ki + 1][kj] > max &&
mapa[ki + 1][kj] < mapa[ki][kj]) {
i = ki + 1;
j = kj;
max = mapa[i][j];
}
// zapad
if (kj - 1 >= 0 && mapa[ki][kj - 1] > max &&
mapa[ki][kj - 1] < mapa[ki][kj]) {
i = ki;
j = kj - 1;
max = mapa[i][j];
}
printf("i: %d, j: %d, vyska: %d\n", i, j, max);
ki = i;
kj = j;
}
}
【问题讨论】:
-
只要
return mapa;,然后在main做相应的修改。 -
这似乎无效 btw
**mapa = nacitaj_mapu(&n);。你在哪里称那个加载图?你应该返回int**而不仅仅是简单的int。 -
@1201ProgramAlarm 我得到“返回值类型与函数类型不匹配”
-
@Eraklon 对,对不起,忘了翻译那位,那是 loadmap() 刚刚翻译了一些上下文
-
@Eraklon 你能澄清一下吗?我不确定我会怎么做。如果只是返回 mapa,那么这会给我一个“返回值类型与函数类型不匹配”错误
标签: c arrays pointers return-value