Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem programovani v C, ukazatele

Dobrý den,

proč mně prosím vás následující program vypíše vždy "ne"?
Podle mě by měl vypisovat naopak "ano".
Děkuji za pomoc.

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

typedef struct data {
  char* string;
  int cislo;
} data;

void init(data *pom_1)

int main()
{
data *pom;

  pom = (struct data *) malloc(sizeof(struct data));

  init(pom);

  if (pom == NULL)
    printf("ano\n");
  else
    printf("ne\n");
   
return 0;
}

void init(data *pom_1)
{
 pom_1 = NULL;
}

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Vsetky parametre funkcii su predavane hodnotou na zasobniku, t.j. ten pointer sa skopiruje na zasobn… nový
MM.. 29.11.2012 18:19
MM..
Nejsem si jistý jestli vám úplně rozumím. Mohl bych vás poprosit o upravení toho zdrojového kodu, po… nový
Luk 29.11.2012 18:23
Luk
ten zdrojovy kod nedava ziaden zmysel, inymi slovami je to totalna chujovina. Ked silou mocou chces… nový
MM.. 29.11.2012 18:27
MM..
Já vím, že je to totalní blbina, ale ted už vím, kde jsem dělal chybu. Děkuji moc za radu. nový
Luk 29.11.2012 18:33
Luk
Nebo jednodušeji by fce init mohla vracet ukazatel. :-) nový
Flash_Gordon 29.11.2012 19:50
Flash_Gordon
Ano ved som pisal ze ten kod je nezmysel. Normalne bud fcia init alokuje a vrati ukazatel, alebo nea… poslední
MM.. 29.11.2012 19:52
MM..

Vsetky parametre funkcii su predavane hodnotou na zasobniku, t.j. ten pointer sa skopiruje na zasobnik a teda nemenis original.
Ked chces nieco menit vo funkcii tak musis dat funkcii pointer na to co chces menit. Keby si chcel menit pointer tak by si musel dat fcii pointer na pointer.
ked predas fcii pointer na strukturu tak mozes menit hodnoty tej struktury, napr. pom_1->cislo = 1;

ten zdrojovy kod nedava ziaden zmysel, inymi slovami je to totalna chujovina.
Ked silou mocou chces zmenit ten pointer tak

void init(data **pom_1);

int main()
{
data *pom;

  pom = (struct data *) malloc(sizeof(struct data));

  init(&pom);

  if (pom == NULL)
    printf("ano\n");
  else
    printf("ne\n");
   
return 0;
}

void init(data **pom_1)
{
 *pom_1 = NULL;
}

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