Struktury - wartość zwracana.

0

Witam, mam pewien problem odnośnie wartości zwracanej, a raczej wykombinowania w jaki sposób mógłbym zwrócić wartość kiedy w prototypie jest "const". Prototypu samej funkcji oraz struct plik nie można modyfikować. Jedyne co to zawartość funkcji znajdz_minimum. Chciałbym dowiedzieć się w jaki sposób mogę zwrócić WSKAŹNIK DO STRUKTURY Z MINIMUM. "const struct plik* pliki" to jest tablica struktur. "int rozmiar_tablicy" to jest rozmiar tej tablicy. <Tak wiem return wynik nie jest możliwy w formie "const" więc nie piszcie mi tego. (dlatego jest w komentarzu, lecz ma pomóc wam zrozumieć o co mi chodzi)>

struct plik
{
    FILE *uchwyt;
    int rozmiar;
};

struct plik* znajdz_minimum(const struct plik* pliki, int rozmiar_tablicy)
{
	int i=0;
	int min=0;
//	dante
//	const struct plik* wynik;
	while(i<rozmiar_tablicy)
	{
		int wielkosc=funkcja() // mało istotne po prostu liczy dlugosc pliku.
		if(min>wielkosc)
		{
			min=wielkosc;
		//	wynik=(pliki+i);
		} 
		i++;
	}
	
//	return wynik;
}
1

Rozsądna, ale najwyraźniej niezgodna z zadaniem odpowiedź: zwróć wskaźnik do const struktury.

const struct plik* znajdz_minimum(const struct plik* pliki, int rozmiar_tablicy)

W obecnej formie możesz castować zwracany wskaźnik:

struct plik* znajdz_minimum(const struct plik* pliki, int rozmiar_tablicy)
{
    int i=0;
    int min=0;
    const struct plik* wynik;
    // dante
    while(i<rozmiar_tablicy)
    {
        int wielkosc=funkcja() // mało istotne po prostu liczy dlugosc pliku.
        if(min>wielkosc)
        {
            min=wielkosc;
            wynik=(pliki+i);
        } 
        i++;
    }

  return (srtuct plik*)wynik;
}

To jest bardzo brzydkie, ale chyba jedyne rozwiązanie zadania. Musisz zwrócić uwagę, że panuje to podobna zasada jaka panuje przy konwersji literałów stringowych na char*. T.j. to jest ok, tak długo, jak przez taki wskaźnik nie modyfikujesz wartości, która jest const. Tym powinien zarządzać system typów, ale jak go łamiesz to sam musisz to zapewnić.

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