polje[i] = *(p + i)
Znači, možeš koristiti notaciju za polja ili pokazivače.
polje[i] = *(p + i)
Znači, možeš koristiti notaciju za polja ili pokazivače.
Moze li itko dati link na temu gdje je TracerCPP dao nekoliko zadataka izt programiranja pokusavao sam pronaci ali ne mogu naci
P.S mislim da je Tracer stavio te zadatke nisam siguran hvala.
heh... u isto vrijeme 
Zahvaljujem :)
Opet pitanje jedno (o pointerima :D ).
Ja stvarno tu neke stvari ne kuzim (pogledati sliku)
Imam između ostalog:
HDEVINFO hDev = SetupDiGetClassDevs(&GUID_DEVCLASS_BATTERY,0,0,DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
SP_DEVICE_INTERFACE_DATA did = {0};
Prvi argument u funkciji SetupDiEnumDeviceInterfaces() je void * DeviceInfoSet i posto piše void * ja sam ocekivao da se unutra upisuje &hDev, a zadnji argument je _SP_DEVICE_INTERFACE_DATA * DeviceInterfaceData
(opet za zvjezdicom) i unutra ulazi &did.
Ja sad fakat ne kužim, zašto u prvom argumentu ne prosljeđujemo adresu od HDEVINFO (znaci &hDev), a u zadnjem da !?
U oba argumenta je zvjezdica, to me tako zbunjuje...
Ta dva pointera nisu istog tipa. Prvi, void pointer, može primiti adresu bilo kojeg tipa, dok ovaj zadnji pointer je očito pointer na neku određenu strukturu.
Iako ov ne spada u ovu temu već sam pitao na temi za engleski no nitko mi se nije javio pišem završni rad dobio sam materijale na englenskom pa neznam par riječi prevesti pa ako itko zna neku stranicu sa prijevodima stručnih riječi mada sumnjam da ima takvo što. Ovo su riječi pa ako netko zna:
-hantsets
-capacitive loading
-helix antenna
-monopole antenna
-feeding structure
-capacitive feed
-candybar
-multipath
-microstrip patch pattern
-feed and ground-connection loading
-multiple anntenas and isolation
Ta dva pointera nisu istog tipa. Prvi, void pointer, može primiti adresu bilo kojeg tipa, dok ovaj zadnji pointer je očito pointer na neku određenu strukturu.
Da, ali zašto u prvom ne upisujem &hDev nego samo hDev a u zadnjem &did (sa '&'), a u oba dva argumenta je '*' znak ?
void f(int *p1);
int main(){
int *pointer, varijabla;
.
.
f(&varijabla); // funkciji se predaje adresa varijable
f(pointer); // vrijednost pointera je nekakva adresu pa '&' nije potrebno pisati
void f(int *p1);
int main(){
int *pointer, varijabla;
.
.
f(&varijabla); // funkciji se predaje adresa varijable
f(pointer); // vrijednost pointera je nekakva adresu pa '&' nije potrebno pisati
Znači ti hoćeš reći da je HDEVINFO u stvari sadržava neku adresu (tj. to je handle od device info-a) i u biti zato ispred ne treba ići '&' znak u onoj funkciji, a kod SP_DEVICE_INTERFACE_DATA did = {0};funkcija zahtijeva da joj predam adresu te strukture i zato ide znak '&' ?
p.s. to se sad odnosi na onaj moj gore primjer, ne na ovaj tu sad.
I da još napomenem, sav sam se pogubio u tome :D
To je tako kad se idu raditi novi windowsi a ni osnove se nisu naučile kako treba 
Nije da radim nove windowse, nego proučavam neke stvari vezane uz Win32API.
Ali slažem se, možda bi trebao neke stvari malo više proučiti kao pokazivače npr.
Pokazivači su osnova za bilo kakvo ozbiljnije programiranje.
Ma čitao sam teoretski dio iz tvoje knjige, ali nisam baš previše u praksi isprobavao do sad neki dan ...
Dvije su osnovne primjene pokazivača:
1. dinamička alokacija memorije (int *p = new int[100])
2. komunikacija među funkcijama
Tebi je u tvom slučaju trebalo ovo drugo. Primjerice, recimo da postoji varijabla 'n' u funkciji main. Ta varijabla je dostupna samo funkciji main jer je u njenom lokalnom području. Zapravo, jedini način da neka druga funkcija pristupi toj varijabli (njenoj adresi) jest da zna njenu adresu;
void f(int* p);
int main(){
int n = 0;
f(&n); // predaje se adresa varijable
cout << n << endl; // ispisuje 5 jer je funkcija f promijenila vrijednost na adresi od n
return 0;
}
void f(int* p){
*p = 5; // na adresi p (onoj adresi koja je predana funkciji f) postavi vrijednost 5
}
Da, ali zašto u prvom ne upisujem &hDev nego samo hDev a u zadnjem &did (sa '&'), a u oba dva argumenta je '*' znak ?
HDEVINFO, da si barem malo proučavao način na koji se imenuju stvari u windows API-ju (systems hungarian), znao bi da je H - Handle, pa je to onda handle devinfo
E sada, da si dalje gledao, znao bi da je svaki handle zapravo void pointer
Ili da skratim:
setupapi.h:
typedef PVOID HDEVINFO;
Dakle to već jest pointer, sasvim je druga stvar što ga je intellisense pokazao kao "void * DeviceInfoSet" umjesto "HDEVINFO DeviceInfoSet". E ali da ti ga je pokazao kao "void ** DeviceInfoSet" ili kao "HDEVINFO * DeviceInfoSet" onda bi morao koristiti &hDev jer bi ti to bila naznaka da je riječ o pokazivaču na pokazivač.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx
Trebaš znati raspetljavati takve stvari. Nisam ja samo jednom po MSDN-u (ili još gore, po headerima) naganjavo makroe i typedefove kako bih vidio što se tu zapravo događa ^^
Što se SP_DEVICE_INTERFACE_DATA strukture tiče to je bar jednostavno, ti imaš varijablu deklariranu kao strukturu, argument traži pokazivač na tu strukturu.
Misterij riješen.
I ozbiljno, poradi na pokazivačima, bez toga nećeš daleko, kako ti je i tracer rekao. Gnjavi nas ovdje kad god ti nešto s pokazivačima nije jasno, prije ili poslije sve ćeš nejasnoće razjasniti...
Hvala na objašnjenju i tebi i traceru, ma isprobavam nešto s baterijom (čitanje voltaže, itd...), ova stvar koju si mi objasnio me već odavna mučila
ali nikako da pitam na forumu, jednostavno mi nije bilo jasno zašto je to tako jer u dosta literature je to dosta komplicirano objašnjeno, nisam baš nailazio
na stvari ovako jednostavno objašnjene baš pa sam veoma zahvalan na objašnjenima.
Ovo što mi vi objasnite sam isprobavao u praksi da prokužim to malo bolje (ne samo ovo sad, nego i od neki dan).
Ma caka ti je u čitanju dokumentacije. MSDN ti je apsolutno neizostavan kada imaš posla sa windows programiranjem. Knjige opisuju neku temu, pokušavaju ti razjasniti neke koncepte, ali uglavnom nikada ne zalaze u dubinu kojom se bave manuali. Manual je tu da ti u detalje opisuje svaki pedalj API-ja, svaku bizarnu funkciju i tip podatka koji ćeš koristiti možda jednom u 100 godina :D
Jesi kad čuo onu: "RTFM"? Eh... :D
Da :D Ma citao sam ja na MSDN-u dokumentaciju (dobro, površno više manje) ali je fora u tome da imam osjecaj da tako nikad necu nauciti programirati ako stalno gledam primjere
i skoro doslovce da prepisujem to sa MSDN-a :D
Da :D Ma citao sam ja na MSDN-u dokumentaciju (dobro, površno više manje) ali je fora u tome da imam osjecaj da tako nikad necu nauciti programirati ako stalno gledam primjere
i skoro doslovce da prepisujem to sa MSDN-a :D
Nisam baš nužno mislio na primjere, niti na kopiranje primjera. Govorim o referenci za kojekakve tipove podataka i funkcije...
Jesi vidio linkove koje ja sa MSDN-a linkam?
A i primjeri su korisni, pokazuju u praksi kako se neka funkcija koristi. Demonstracija.
Da, vidio sam linkove, ali meni to slabo koristi uglavnom pa vise primjere gledam, a onda doslovce skoro da ih i kopiram
(tu i tamo nesto izmjenim i prilagodim si), ali to mi nije to onda ... :/
Sad ne znam dali je to "pravo programiranje" ako takve stvari radiš ...
Nije da ja imam previše iskustva sa C++, ja sam sad više u fazi učenja osnova više manje ...
Da, vidio sam linkove, ali meni to slabo koristi uglavnom pa vise primjere gledam, a onda doslovce skoro da ih i kopiram
(tu i tamo nesto izmjenim i prilagodim si), ali to mi nije to onda ... :/
Ako ne razumiješ ono što si kopirao onda je problem.
Windows programiranje se sastoji od poprilične količine šablonskog i repetitivnog koda tako da tu i nije neko zlo raditi copy/paste. Ne možeš očekivati od sebe da bilo što možeš uzeti i pisati onako iz glave bez da se podsjetiš ili čak prvi puta vidiš kako se nešto radi. Za to ti služi MSDN, da ne moraš sve stalno držati u glavi. Stvari koje često koristiš već će ti se uvući pod kožu, one ostale neće i svaki puta ćeš ih se iznova morati prisjećati...
Ma dobro, pokušavam čim manje kopirati i čim više razumjeti dok nešto radim, jedino gdje stalno sam zapinjao do sada su bili pointeri više manje i sad mi je
poprilično jasno da moram to savladati kako treba i provježbati čim više primjera.
Da :D Ma citao sam ja na MSDN-u dokumentaciju (dobro, površno više manje) ali je fora u tome da imam osjecaj da tako nikad necu nauciti programirati ako stalno gledam primjere
i skoro doslovce da prepisujem to sa MSDN-a :D
programirati ne ucis iz dokumentacije, dokumentacija ti je vise manje kako neki dio radi, ne mozes ocekivati da ces bas znati sto trebas procitati u nekom normalnom razvojnom putu...
na isocpp.org imas pocetak bjarneove knjige...
programirati ne ucis iz dokumentacije, dokumentacija ti je vise manje kako neki dio radi, ne mozes ocekivati da ces bas znati sto trebas procitati u nekom normalnom razvojnom putu...
na isocpp.org imas pocetak bjarneove knjige...
Ta ce mu knjiga biti od veelike koristi... On uci programirati Windows aplikacije koristeci WinAPI, te zapinje na stvarima koji se ticu api-a, vidio si gore. Knjiga ce ga nauciti osnovno o pokazivacima, a on to vec zna. Njemu bi dobrodosla knjiga o WinAPI-u.
@night_rider, probaj doci do knjige Programming Windows, peto izdanje, Od Charles Petzold-a. Meni ju je poslao @rustweaver, ako ne uspijes naci, javi se.
Osobno smatram da ces najbolje pokazivace nauciti i skuziti uz pomoc jednostruko i dvostruko povezanih listi. Teoriju i osnove sada sigurno kuzis, ali kad implementiras dvostruko povezanu listu i _skuzis_ sto si napisao i kako to radi, tada ces znanje o pokazivacima zaista utabati.
No, ponavljam, to je samo moje osobno misljenje.
Hvala vam dečki, budem to navečer sve proučavao (i pokušao pronaći knjigu), sad idem na neku kavicu :D