Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przesyłanie tablicy do funcji

Ostatnio zmodyfikowano 2013-08-22 18:24
Autor Wiadomość
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?
C/C++
#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++;
    }
   
    // liczba ujemna
    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;
        }
    }
}
P-90761
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:
C/C++
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.
P-90763
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?
P-90766
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.
P-90768
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.
P-90771
killjoy
» 2013-08-22 17:37:38
Fakt masz racje, zapędziłem się z tymi tablicami :D
P-90773
Szary
Temat założony przez niniejszego użytkownika
» 2013-08-22 18:24:24
ok dzięki wielkie :)
P-90777
« 1 »
  Strona 1 z 1