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 |
---|---|---|
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.. |
Zpět do poradny Odpovědět na původní otázku Nahoru
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. zápis: *p_i = &i;
2. zápis: p_i = &i;
*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;
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.
Už tomu rozumím.
Díky, moc si mi pomohl.
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;