Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C, pointer

Dobrý večer,
prosim vás, našel by se tu někdo, kdo by mi dokázal vysvětlit, jaký je rozdíl mezi:

int i, *p_i = &i; int i, *p_i;
p_i = &i;

tedy rozíl mezi:

*p_i = &i; a p_i = &i;

Děkuji.

Předmět Autor Datum
omlouvám se, správně by to mělo být takto: int i, *p_i = &i; int i, *p_i; p_i = &i; rozíl mezi 1…
REl 22.10.2011 19:10
REl
*p_i = &i je tak jak si to definoval nespravne a ani ti to compiler neskompiluje (error). * znamena…
MM.. 22.10.2011 19:32
MM..
jaj ty myslis to *p_i = &i v definicii, tak v tom ziaden rozdiel neni. :D Proste to prve je definici…
MM.. 22.10.2011 19:33
MM..
Takže pokud to dobře chápu, tak v obou případech bude v "p_i" adresa proměnné "i", ano? Ale v kníze…
REl 22.10.2011 19:39
REl
Už tomu rozumím. Díky, moc si mi pomohl.
REl 22.10.2011 19:45
REl
Ano, vysledny efekt je stejny. Ten znak * citaj ako "obsah toho kam ukazuje pointer" takze ked defin… poslední
MM.. 22.10.2011 19:53
MM..

*p_i = &i
je tak jak si to definoval nespravne a ani ti to compiler neskompiluje (error).

* znamena miesto kam ukazuje pointer, takze do *p_i mozes priradit samotny integer, ale nie pointer na integer.
Ked chces priradovat do *p_i pointer tak by muselo byt to p_i definovane ako pointer na pointer, t.j. int **p_i;

Ano, vysledny efekt je stejny.
Ten znak * citaj ako "obsah toho kam ukazuje pointer"
takze ked definujes
int *p_i
to citas ako "obsah toho kam ukazuje pointer p_i definujem ako int", z toho vyplyva ze p_i je pointer na int, a potom v programe:
a) ked chces nastavit ten samotny pointer tak pises
p_i = &i;
b) ked chces nastavit hodnotu toho int na ktore pointer ukazuje, tak napises
*p_i = i; alebo *p_i = 3; apod

No a to na co si sa pytal je specialna situacia pri definicii pointra ked ho chces hned nastavit na nejaku adresu, tak rovno napises do definicie pointra aj tu adresu
int *p_i = &i;
to je vporiadku pri definicii. Zvycajne ludia pointre inicializuju na NULL (int *p_i = NULL;), ak nemas uz pri definicii to na co ho chces priradit, a potom sa da aj testovat pripadna chybova situacia
if(p_i == NULL)
printf("niekde mam chybu neprirdail som nic do pointra")
else
*p_i = 10;

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