Stránka 1 z 1

C - Předávání dvourozměrného pole funkci

Napsal: 20 bře 2013 14:26
od LukasMegPrask
Ahoj, mám problém s předáním respektive vrácením dvourozměrného pole funkce.

V kódu mám například definovanou tuto funkci:

int uprava(int mod, int radek, int sloupec, int(*matice)[sloupec+1])
{
for (int i = 0; i < radek; i++)
{
for(int j = 0; j <= sloupec; j++)
{
matice[i][j] %= mod;
}
}

return matice;
}

int main(void)
{
int modulo, sloupec, radek;

scanf("%d", &modulo);
scanf("%d %d", &sloupec,&radek);

int matice[radek][sloupec+1];

uprava(modulo,radek,sloupec,matice);
...
...
...


return 0;
}

Program sice spustím, ale píše mi to warrning: Return makes integer from pointer without a cast(enabled by default).
Program mám jako úkol do školy, a musíme ho odevzdávat bez warningu, takže prosím o radu :?

Re: C - Předávání dvourozměrného pole funkci

Napsal: 20 bře 2013 14:41
od CZechBoY
čau,
kde ti to hlásí tu chybu?

btw máš to pole vůbec alokovaný?

Re: C - Předávání dvourozměrného pole funkci

Napsal: 20 bře 2013 17:13
od faraon
Pole v Céčku předávat nejde, jen ukazatel na něj, podívej se jak se předávají třeba řetězce (pole znaků) funkci scanf(). Předáváš prostě ukazatel na místo v paměti kde se má provést nějaká činnost, funkce jí provede a skončí, nepotřebuješ žádný return! Tedy pokud ta funkce nevrací nějakou vypočítanou hodnotu, třeba scanf() vrací počet úspěšně načtených položek (aby ses dozvěděl jestli byla správná vstupní data).

Ten tvůj program se dá zkompilovat po téhle úpravě:

Kód: Vybrat vše

void uprava(int mod, int radek, int sloupec, int(*matice)[sloupec+1])
{
    for (int i = 0; i < radek; i++)             
    {                                               
        for(int j = 0; j <= sloupec; j++)
        {
            matice[i][j] %= mod;
        }
    }
}


Ale zamysli se nad tím co vlastně ta uprava() má provádět, jestli to co jí předáváš je skutečně to co chceš zpracovávat...

Re: C - Předávání dvourozměrného pole funkci

Napsal: 20 bře 2013 19:28
od LukasMegPrask
Jo jo díky, už mi to jede bez warningů ;)