Przekazywanie argumentu do funkcji - pytanie

0

witam, mam taki prosty program:

 #include <stdio.h>
#define ROZMIAR 15

int zeruj(int tab[][ROZMIAR], int rzedy, int kolumny)
{
    int i, j;
    for(i=0;i<rzedy;i++){
        for(j=0;j<kolumny;j++)
            tab[i][j]=0;
    }
}

int main()
{
    int tablica[ROZMIAR][ROZMIAR];
    zeruj(tablica, ROZMIAR, ROZMIAR);
    return 0;
}

i wszystko jest ok. Jeśli jednak chcę zadeklarować stałą jako argument funkcji, to program się nie chce skompilować. Może ktoś powiedzieć, czemu tak jest?

 int zeruj(int tab[][ROZMIAR], int ROZMIAR, int kolumny)
{
    int i, j;
    for(i=0;i<ROZMIAR;i++){
        for(j=0;j<kolumny;j++)
            tab[i][j]=0;
    }
}

i jeszcze jedno pytanie, czy trzeba pisać w printf jaki typ danych chcemy wyświetlić? w sensie

unsigned long long int x;
printf("trzeba %llu czy mozna %d ?", x, x); 
0

czy trzeba pisać w printf jaki typ danych chcemy wyświetlić?
tak.

1

Po co Ci przekazywanie tego ROZMIAR skoro wsadziłeś to w pierwszym parametrze w tablicę? To już trochę nie ma sensu, nie sądzisz? Usuń parametr odpowiadający za ten wymiar - jeżeli chcesz go przekazywać to po prostu wpisuj to podczas wywołania jak do tej pory. Poza tym lepiej jest używać stałych niż makr i Twój typ w tych rozmiarach jest zły - powinien być bez znaku, najlepiej size_t. Dodatkowo zamiast używać takiej dziwnej funkcji dla tablic statycznych powinieneś użyć memset (o ile wiesz, że to zadziała - wcale nie musi, hint: trap representation, memset ustawia tylko bajty) albo po prostu zrobić odpowiednią inicjalizację:

int tablica[ROZMIAR][ROZMIAR] = {0};

Co do printf - tak, musisz podać prawidłowy typ. Gdyby nie trzeba było tego robić to nie byłoby tych literek. ;-) Kompilator potrafi poinformować kiedy format nie zgadza się z typem.

0

A może przekaż tablice przez referencję:

#define ROZMIAR 15

void zeruj(int (&tab)[ROZMIAR][ROZMIAR])
  {
   for(int y=0;y<ROZMIAR;++y) for(int x=0;x<ROZMIAR;++x) tab[y][x]=0;
  }

int main()
  {
   int tablica[ROZMIAR][ROZMIAR];
   zeruj(tablica);
   return 0;
  }

no chyba że musi to być czysty C

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