

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.
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 |
---|---|---|
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 | |
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.. |
Zpět do poradny Odpovědět na původní otázku Nahoru
jaj ty myslis to *p_i = &i v definicii, tak v tom ziaden rozdiel neni. :D
Proste to prve je definicia pointra a hned aj s inicializaciou, a to druhe je definovane bez inicializacie, a potom je priradenie toho pointra niekde v programe.
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 Učebnice jazyka C, se píše, že je třeba dát si velký pozor na tyto dvě odlišnosti.
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;