Różne nazwy zmiennej w funkcjach.

0

Witam wszystkich , mój problem polega na tym , że do końca nie rozumiem skąd funkcja wie , którą wartość pobrać . Przejdę do przykładu :

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void podaj_liczby( int liczba[], int i )
{
    do
    {
        cin >> liczba[ i ];
        i++;
    }
    while( i < 3 );

}

bool czy_byla( int x[], int l, int ile )
{
    if( ile <= 0 )
         return false;

    int i = 0;
    do
    {
        if( x[ i ] == l )
             return true;

        i++;
    }
    while( i < ile );

    return false;
}

void wylosuj( int t[], int i, int t2[] )
{
    int licznik = 0;
    do
    {
        int liczba = rand() % 2 + 1;
        t2[ licznik ] = liczba;

        if( czy_byla( t2, liczba, i ) == false )
        {
            cout << t[ liczba ] << ", ";
            i++;
            licznik++;
        }

    }
    while( i <= 2 && licznik <= 2 );

}

int main()
{
    srand( time( NULL ) );
    int tab[ 3 ];
    int tab2[ 2 ];
    int wylosowanych = 0;
    podaj_liczby( tab, 0 );
    wylosuj( tab, wylosowanych, tab2 );

    return 0;
}

w funkcji void podaj_liczby( int liczba[], int i ) jest pobrana jedna tabelka i jedna zmienna i , lecz w funkcji main sa dwie tabele i jedna zmienna o nazwie wylosowanych. Skąd kompilator wie , która tablice pobrać i która zmienną jeśli ich nazywa się różnią w obu funkcjach? nie rozumiem tego za nic . Proszę bardzo o wyjaśnienie

4
podaj_liczby(tab, 0);

Wywołujesz funkcję podaj_liczby() z takimi argumentami, więc wewnątrz tej funkcji liczba będzie wskazywać na tablicę tab, a i będzie miało wartość 0 (przy wejściu).

I popraw post zgodnie z tym artykułem: Dlaczego nikt nie odpowiada w moim wątku?

0

Dziękuje za pomoc . I będę następnym razem korzystał z nowych cennych rad co do zakładania tematów

2

@Pes2009 matematyka lvl szkoła podstawowa. Mamy funkcje f(x) = 10*x. Mamy dwie dane a = 5 oraz b = 10. Czy potrafisz mi powiedzieć ile wynosi f(a)? Jak to zrobiłeś skoro mieliśmy dwie dane a oraz b? Skąd wiedziałeś której użyć? ;]

0

Nie zrozumiałeś mojego problemu ^^ . Chodziło mi o to , że nie wiem czemu ale uparłem się w głupim twierdzeniu że jak jakaś funkcja używa np dajmy na to (int liczba) to pod taką sama nazwą musi być zmienna w funkcji main. Dodatkowo też nie wiem czemu byłem przekonany , że tablicy są raz przypisywane wartości i nie da się ich zmienić , a przecież się da tak jak w zwykłych zmiennych typu int ( czy już się zgubiłem i się nie da :D? )

1

"Tablica" to sztuczne stwierdzenie. Tak naprawdę jest tylko wskaźnik i zadeklarowana pamięć. Przekazując argument do funkcji ZAWSZE jest on kopiowany / przenoszony (move semantics z cpp11) (wbrew przekonaniom niektórych osób. Pomijam tutaj wszelkie magiczne optymalizacje. Być może tylko referencje nie są kopiowane). Jeśli przekazujesz inta - jest on kopiowany i pracujesz na kopii, nie na oryginale (stąd np. oryginału nie zmienisz)
http://ideone.com/WieMKX
Jeśli przekazujesz "tablice" do funkcji - przekazujesz tak naprawdę WSKAŹNIK na początek tej "tablicy". Oczywiście wskaźnik ten jest kopiowany.
http://ideone.com/fBK7JQ
Nie jest kopiowana jednak pamięć zadeklarowana pod tym wskaźnikiem, owa tablica. Przekazujesz wskaźnik - kopiowany jest wskaźnik. Tyle. Czyli tablice w funkcji możesz zmieniać.

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