C - Tablica 2d jako argument funkcji

0

Jak podać tablicę charów jako argument funkcji w C. Przy takim zapisie:

int main(void) {
char go[range + 1][range + 1];
initArray(go, range);
}
void initArray(char go[][], int range) {}

Dostaję błąd: "array type has incomplete element type 'char[]'"

0
void initArray(char go[][SIZE], int range) {} 

Ale ten rozmiar musi być znany przed użyciem go w deklaracji funkcji.

0

Dzięki, działa :D
Pojawił się kolejny problem. W poniższej funkcji(jest w telegraficznym skrócie), przy jakiejkolwiek próbie odwołania do tablicy program się wysypuje.

#include <stdio.h>
#include <stdlib.h>

void initArray(char go[][20], int range);
void printArray(char go[][20], int range);

int main(void) {
	char c;
	int isInit = 0;
	int range = 0;
	while (isInit == 0) {
		if (c == EOF) {
			return -1;
		}
		if ((c = getchar()) == 'Z') {
			if ((c = getchar()) == '[') {
				c = getchar();
				if (c > '0' && c <= '9') {
					range = c - 48;
					c = getchar();
					if (c >= '0' && c <= '9') {
						range = range * 10 + (c - '0');
					}
					isInit = 1;
				}
			}
		}
	}
	printf("T1");

	if (range > 19 || range < 1) {
		return 1;
	}

	char go[range + 1][range + 1];
	initArray(go, range);
	printf("T2");

	while ((c = getchar()) != EOF) {
		if (c == ';') {
			c = getchar();
			if (c == 'W') {
				getchar();
				go[(int) (getchar() - 'b')][(int) (getchar() - 'b')] = 'O';
			} else if (c == 'B') {
				getchar();
				go[(int) (getchar() - 'b')][(int) (getchar() - 'b')] = 'X';
			}
		}

	}
	printf("T3");

	printArray(go, range);
	return 0;
}

void printArray(char go[][20], int range) {
	range++;
	int maxB = 0;
	int maxC = 0;
	int maxB_tmp = 0;
	int maxC_tmp = 0;

	for (int i = 0; i < range; i++) {
		for (int j = 0; j < range; j++) {
			printf("TP");
			printf("%c ", go[i][j]);
			printf("TP1");
			if (go[i][j] == 'O') {
				maxB_tmp++;
			} else if (go[i][j] == 'X') {
				maxC_tmp++;
			}
		}
		if (maxB_tmp > maxB) {
			maxB = maxB_tmp;
		}
		if (maxC_tmp > maxC) {
			maxC = maxC_tmp;
		}
		maxB_tmp = 0;
		maxC_tmp = 0;
		printf("\n");
	}
	printf("%d %d", maxC, maxB);
}

void initArray(char go[][20], int range) {
	range++;
	for (int i = 0; i < range; i++) {
		for (int j = 0; j < range; j++) {
			go[i][j] = '.';
		}
	}

	go[0][0] = ' ';
	for (int i = 1; i < range; i++) {
		go[0][i] = 'A' + i - 1;
		go[i][0] = 'A' + i - 1;

	}
}
0

Informujesz, ze przekazujesz char go[][20], a przekazujesz coś innego, dlatego się wysypuje.

0

W wywołaniu funkcji initArray(go, range); przekazujesz wskaźnik na pierwszy element tablicy go, czyli wskaźnik na element go[0][0], aby całą tablicę przekazać statycznie do funkcji musiałbyś mieć w całym programie od początku do końca wiadomą wielkość tablicy go, czyli np tablica go musiała by mieć rozmiar 20x20, wtedy funkcję mógłbyś zadeklarować tak: void initArray(char go[20][20], int range); ale dalej w programie tablica go nie mogłaby już mieć rozmiaru [range+1][range+1] tylko też dokładnie [20][20] i ostatnim etapem byłoby jej przekazanie do funkcji tak: initArray(go[20][20]).
chyba lepszym sposobem jest stworzenie dynamicznie alokowanej tablicy i przekazanie do funkcji wskaźnika na pierwszy element tablicy:
void initArray(char** go, int range);
W programie tablicę go tworzysz jako wskaźnik:
char** go = new char * [range + 1];
a funckję wywołujesz w taki sam sposób jak to robisz teraz, jak nie zamotałem to powinno dzialać

0

Mój kompilator nie zna słowa "new". Jak to w czystym C zrobić?
EDIT:
Nieaktualne, zrobiłem tablicę globalną :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1