Diskuze: Práca s premennými z iných funkcí

C++ C a C++ Práca s premennými z iných funkcí

Avatar
Člen
Člen
Avatar
Člen:

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
Redaktor
Avatar
Martin Dráb:

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):
#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):
#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):

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.