Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Jazyk C - předávání odkazem

Čus, mám primitivní program, který mi vyhazuje nesmysly, ale netuším proč

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

void zmena(int *c)
{
	printf("2. %d\n", c);
	*c = c + 1;                // warning: assignment makes integer from pointer without a cast
	printf("3. %d\n", c);
}


int main()
{
    int cislo = 0;

    printf("1. %d\n", cislo);
    zmena(&cislo);
	printf("Vysledna hodnota %d\n", cislo);

	return 0;
}

Výpis:
1. 0
2. 2686748
3. 2686752
Vysledna hodnota 2686752

V čem dělám chybu, popř. jak by to mělo vypadat, aby výsledna hodnota byla 1?

Překládám to v CodeBlocksu, spouštím přes příkazový řádek na Windows 8.1.

Předmět Autor Datum
*c = c + 1; Tady je problém. Přičítáš tam pointer, ne hodnotu na kterou ukazuje. Správně tedy takto… nový
Niko Bellic 06.11.2014 10:49
Niko Bellic
keby aspon cital ten warning :) nový
MM.. 06.11.2014 11:05
MM..
čítal, ale netušil, co to pro mě přesně znamená :) nový
ahojahojahoj 06.11.2014 11:19
ahojahojahoj
Ještě dotaz, jak bych měl vyřešit, když proměnou potřebuji ve funkci, kterou volá další funkce, ve v… nový
ahojahojahoj 07.11.2014 17:52
ahojahojahoj
Keď potrebuješ len smerník na int, tak si posielaj ďalej len smerník na int (namiesto smerníka na sm… poslední
los 07.11.2014 18:22
los

Ještě dotaz, jak bych měl vyřešit, když proměnou potřebuji ve funkci, kterou volá další funkce, ve výsledku něco takového:

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

void zmena1(int *c)
{
	*c = *c + 1;
        zmena2(&c)
}

void zmena2(int **c)
{
        **c = **c + 1;
}


int main()
{
    int cislo = 0;

    zmena1(&cislo);
    printf("Vysledna hodnota %d\n", cislo);

    return 0;
}

(sepsal jsem to z hlavy, snad tam není nějaký jiný problém)

Ten ukazatel na ukazatel ve druhé funkci vypadá divně, proto bych se chtěl zeptat, jestli není možnost, jak to vyřešit nějak jinak. Ptám se protože v programu potřebuju takhle předat hodnotu přes více funkcí, takže ve výsledku tam pak pracuju s ***proměná, což mi sice funguje, jak má, ale nevypadá to rozumně.

Zpět do poradny Odpovědět na původní otázku Nahoru