Funkcja zwracająca tablicę dwuwymiarową [C]

0

Mam problem z funkcją zwracającą tablicę, tzn. chciałbym przerobić funkcję generującą macierz (void) na taką co ją zwraca (int). Trochę próbowałem, ale generują się wartości, których nie oczekuję, czyli 0.00000. Sam kod funkcji void wygląda tak (N definiuję w tym momencie jako 15):

void spinGen(int (*spin)[N])
{
    srand((unsigned) time(NULL));
    for(int i=0; i<N; i++, spin++)
    {
        for(int j=0; j<N; j++)
        {
            (*spin)[j] = rand()%2;
            //printf("%d ", (*spin)[j]);      //do testu
        }
        //printf("\n");                       //do testu
    }
}

int main()
{
    int spin[N][N] = {};
    spinGen(spin);
    return 0;
}

Co musiałbym zrobić, żebym mógł zwrócić tą tablicę do np. int spin2, który stoi w mainie? Jakby co to że void muszę zamienić na int i na końcu dać return to wiem xD

0

funkcja zwracająca int zwraca pojedynczą wartość, sprecyzuj co chcesz zrobić - a w tym znajdziesz odpowiedź.

2

Właśnie, jak wyżej, ale domyślając się, że Chcesz mieć funkcję generującą (i zwracającą) tablicę dwuwymiarową, to będzie to wyglądało trochę inaczej. Przekazujesz rozmiar generowanej tablicy (a nie jakąś tablicę), Tworzysz ją w funkcji i Zwracasz, jako pointer do pointera:

int ** spinGen(int N){
    srand((unsigned) time(NULL));
    int **out;
    out = malloc(sizeof(int*) * N); 
    for (int i = 0; i < N; ++i) {
		out[i] = malloc(sizeof(int) * N);
	}
    for(int i=0; i<N; i++)
    {
        for(int j=0; j<N; j++)
        {
            out[i][j] = rand()%2;
            //printf("%d ", (*spin)[j]);      //do testu
        }
        //printf("\n");                       //do testu
    }
    return out;
}

int main()
{	
	int N = 2;
    int **spin;
    spin = spinGen(N);
    for (int i = 0; i < N; ++i){
		for (int j = 0; j < N; ++j){
			printf("%d ", spin[i][j]);
		}
		printf("\n");
	}
    return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.