Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Člen
Člen
Avatar
Člen:24.1.2015 17:38

Vedel by mi niekto poradiť, ako môžem pracovať s premennou, ktorá je deklarovaná v inej funkcí?

void test{
int premenna = 123;
}
int main(){
tu by som chcel s nou pracovat
}
Odpovědět
24.1.2015 17:38
...
Avatar
Martin Dráb
Tvůrce
Avatar
Martin Dráb:24.1.2015 18:40

S normální lokální proměnnou toto nepůjde, protože pokud funkce není volaná, místo pro tuto proměnnou není alokované. Možná, kdyby proměnná byla deklarovaná jako stacit (jestli se nepletu, takové proměnné zachovávají hodnotu napříč jednotlivými voláními funkce), teoreticky by něco šlo udělat, ale nevím, zda to jazyk podporuje.

Řešením je ve funkci pracovat s danou hodnotou přes ukazatel, nebo vše potřebné předat v parametrech.

Čeho bys chtěl dosáhnout přesně?

Nahoru Odpovědět
24.1.2015 18:40
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Člen
Libor Šimo (libcosenior):26.1.2015 8:22
#include <stdio.h>

int test(){
    int premenna = 123;
    return premenna;
}
int main(){
    int i = 10, premenna_z_funkcie = test();

    printf("%d\n", premenna_z_funkcie / j);
}
Nahoru Odpovědět
26.1.2015 8:22
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):26.1.2015 8:38
#include <stdio.h>
#include <stdlib.h>

void premenne(int *i, int *j)
{
    *i = 25;
    *j = 50;
}

int main(void)
{
    int i, j, *p_i = &i, *p_j = &j;

    premenne(p_i, p_j);
    printf("%d + %d = %d\n", *p_i, *p_j, *p_i + *p_j);

    return 0;
}
Nahoru Odpovědět
26.1.2015 8:38
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):26.1.2015 11:00

Myslím, že najlepšie je použitie poľa pointerov.

#include <stdio.h>
#include <stdlib.h>

void premenne(int *i)
{
    i[0] = 25;
    i[1] = 50;
    i[2] = 12;
    i[3] = 31;
}

int main(void)
{
    int *p_i;

    p_i = (int *) malloc(4 * sizeof(int));
    premenne(p_i);
    printf("%d + %d + %d + %d = %d\n", p_i[0], p_i[1], p_i[2], p_i[3], p_i[0] + p_i[1] + p_i[2] + p_i[3]);

    return 0;
}
Nahoru Odpovědět
26.1.2015 11:00
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.