Przesyłanie tablicy do funcji
Ostatnio zmodyfikowano 2013-08-22 18:24
Szary Temat założony przez niniejszego użytkownika |
Przesyłanie tablicy do funcji » 2013-08-22 16:39:39 będziecie się śmiać ale naprawdę nie rozumiem/ nie widzę swojego błędu i mam tak od dłuższego czasu w visual c++ z czego wiem że na devc++ nie ma tego błędu i na linuxie jak w C::B programuje też wszystko łyka więc: Dlaczego przesyła tylko jedno pole a nie całą tablicę do funcji? #include <iostream> #include <stdlib.h> #include <math.h> using namespace std;
int oblicz( int tab[], int dlugosc_tab ); int pow( int, int ); int dlugosc_tab( int * tab );
int main() { int binar[ 5 ]; binar[ 0 ] = 1; binar[ 1 ] = 0; binar[ 2 ] = 1; binar[ 3 ] = 0; binar[ 4 ] = 0; int x = oblicz( binar, dlugosc_tab( binar ) ); cout << x; system( "PAUSE" ); return 0; }
int oblicz( int tab[], int dlugosc_tab ) { int wynik = 0, wykladnik = 0; for( int iK = dlugosc_tab; iK > 0; iK-- ) { wynik += pow( 2, wykladnik ); wykladnik++; } if( tab[ 0 ] == 1 ) return wynik *= - 1; return wynik; }
int dlugosc_tab( int * tab ) { return sizeof( tab ) / sizeof( int ); }
int pow( int podst, int wykladnik ) { int wynik = podst; if( wykladnik == 0 ) return 1; else { for( int iK = 1; iK < wykladnik; ) { wynik *= podst; } } } |
|
killjoy |
» 2013-08-22 16:48:53 Przesyła całą tabele (konkretnie wskaźnik na 1 element), tylko że nie dasz rady sprawdzić rozmiaru tabeli w funkcji jak ta: int dlugosc_tab( int * tab ) { return sizeof( tab ) / sizeof( int ); }
Bo pierwszy sizeof() nie zwróci ci rozmiaru całej tabeli tylko właśnie rozmiar wskaźnika, więc jeżeli chcesz mieć rozmiar tabeli to muszisz go przesłać jako dodatkowy parametr. |
|
Szary Temat założony przez niniejszego użytkownika |
» 2013-08-22 17:10:52 ok, dzięki teraz rozumiem. a jak zmierzyć w takim razie ilość elementów w tablicy? |
|
killjoy |
» 2013-08-22 17:21:45 Jeżeli chodzi o tablice liczbowe, to nie ma uniwersalnego sposobu, możesz sprawdzać co jest w kolejnej komórce tablicy i zwiększać jakąś zmienną, aż nie spotkasz ustalonej wartości, najbezpieczniej jest jednak przesłać wcześniej ilość elementów. Co do tablicy char to przyjęło się, że takowa kończy się znakiem '\0' czyli poprostu zerem w ostatniej komórce i jest do tego specjalna funkcja tj. strlen(), która zwraca ilość znaków. |
|
pekfos |
» 2013-08-22 17:35:58 Co do tablicy char to przyjęło się, że takowa kończy się znakiem '\0' |
Nie. To c-string kończy się zerem, a nie tablica. |
|
killjoy |
» 2013-08-22 17:37:38 Fakt masz racje, zapędziłem się z tymi tablicami :D |
|
Szary Temat założony przez niniejszego użytkownika |
» 2013-08-22 18:24:24 ok dzięki wielkie :) |
|
« 1 » |