 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Pet Mar 21, 2008 9:39 am Naslov sporočila: |
|
|
Sokrat je napisal/a: |
Domnevam, da je tvoj odgovor misljen splosno in ne za konkretno vprasanje/temo |
Ja seveda..
Govoril sem o tem kaj lahko predstavlja C sintaksa oziroma o moči C-ja, ki pa si jo ti v svojem postu omejil!
Sokrat je napisal/a: |
Aja, pa se to: odkar programiram MCUje, niso niti enkrat prisli na vrsto objekti (ni prostora za razmetavanje, tudi ce bi obstajal embedded C++ za "moje" arhitekture)  |
Ja jasno, če delaš le 8 in 16 bitniki. Daj vzemi si kakšen 32 bitni procesor, ki ima nekaj mega bytov RAMa in teče pod njem kakšen relativno preprost OS na njem pa 'lavfa' recimo Java.
LP GJ |
|
Nazaj na vrh |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Pet Mar 21, 2008 9:46 am Naslov sporočila: |
|
|
Pozorno preberi moj post -- vem, da se jih da z malloc in realloc povečevat in zmanjševat, samo, kot sem napisal, to ni dinamični array, vsaj za moje pojme ne. V vsakem trenutku ima eno velikost, ki je ne moreš (ne smeš) preseči. Ja, lahko ga povečaš, samo to se ne naredi avtomatsko, in novi array je spet alociran statično.
Res dinamične (t.j. takšne, ki se povečajo 'sami') arraye oz. strukture podobnega tipa pozna recimo c++, delphi, ...
LP! |
|
Nazaj na vrh |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Pet Mar 21, 2008 10:02 am Naslov sporočila: Re: Inicializacija pointerja na int array v C-ju |
|
|
alessio je napisal/a: |
Poznam klasične načine in ne gre za to, kaj bi rad naredil, ampak kako.
In ideja je z pointerjem na array integerjev.
chaos je napisal/a: |
Kje si pa videl način, kakor si naredil ti (int (* pdata)[3] =data;) ?? Tukaj imaš pointer na array pointerjev ...
|
Kolikor jaz vem, je int (* pdata)[3] deklaracija pointera na array integer števil in ne na pointer na array pointerjev, kot praviš. |
Najprej to zadnje. Kot prvo, je nepravilno napisano zaradi oklepajev. pdata[] je sam po sebi pointer oz. array, ki kaže na podatke tipa int*. Se pravi pointer na array pointerjev. Ja, nič posebnega, to se velikokrat uporablja, samo ne v tvojem primeru.
In še prva stvar:
Kar sem jaz napisal, ni noben 'klasičen' način.
data je pointer. Uporabljaš ga lahko kot data[] ali pa *data.
pdata je pointer. Uporabljaš ga lahko kot *pdata, in, če že kaže na data[], tudi kot pdata[].
S pomočjo pdata = data 'izenačiš' ta dva pointerja -- po tem oba kažeta na isto spominsko lokacijo. Kot verjetno veš, pri uporabi pointerjev s takšno operacijo NE nastavljaš dejanske vrednosti pointerja, ampak naslov, kamor pointer kaže.
Tako kot sem jaz napisal je točno to, kar hočeš: pointer na array integerjev. Lahko recimo preizkusiš: printf("%c", *pdata) in dobiš prvo črko v arrayu.
Tvoj način očitno ne dela. Mojega lahko poizkusiš, če mi ne verjameš na besedo ...
LP!
Nazadnje urejal/a chaos Pet Mar 21, 2008 11:02 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Pet Mar 21, 2008 10:51 am Naslov sporočila: |
|
|
chaos je napisal/a: |
Pozorno preberi moj post --! |
Uredu..
Upiču sem se zaradi Sokratovih trditev kot je recimio..
'...array ni nic drugega, kot pointer na nekaj z znano dolizno elementa.'
Napisati bi moral 'statični array'.
In pol še.. ' Pointer na pointer necesa bi blo malce smesno..'
Ti časi so minili..
Če recimo pogledaš Atmelov MCU AT91SAM9RL in njegovo razvojno ploščo boš videl, da ima plošča 64Mbytes SDRAMa in 256MBytov FLASHa.
Na njem pa je lahko zagnan Linuks: http://linuxdevices.com/news/NS4797034179.html
Objektno programiranje pod MCUji in dinamična alokacija spomina je torej že nekaj časa tukaj!
LP GJ |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Tor Jul 28, 2009 12:27 pm Naslov sporočila: |
|
|
pravilno je seveda:
int data[3] = {1,2,3};
int (* pdata)[3] = &data;
pdata je tukaj deklariran kot pointer na int[3], kar je v resnici ptr na ptr
do elementov dostopaš z:
*pdata[0] = 11;
*pdata[1] = 12;
*pdata[2] = 13;
če bi imel int *pdata[3] je pa to potem array treh pointerjev na int
v praksi bi jaz uporabljal:
int data[3] = {1,2,3};
int *pdata = data;
in potem klasično
pdata[0] = 11;
pdata[1] = 12;
pdata[2] = 13;
ali pa morda:
*pdata++ = 11;
*pdata++ = 12;
*pdata++ = 13;
sicer pa pozor pointerji se ponavadi ne uporabljajo za dostop do statični arrayev ampak za dinamično alokacijo pomnilnika recimo:
int *pdata = new int[10]; |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Tor Jul 28, 2009 10:01 pm Naslov sporočila: |
|
|
gregoral je napisal/a: |
pravilno je seveda:
int data[3] = {1,2,3};
int (* pdata)[3] = &data;
pdata je tukaj deklariran kot pointer na int[3], kar je v resnici ptr na ptr
do elementov dostopaš z:
*pdata[0] = 11;
*pdata[1] = 12;
*pdata[2] = 13;
|
Narobe!
[] ima prednost pred *
(*pdata)[0] ... bo prav
V vsaki normalni kodi bo pa "int *pdata = data", kot si ze napisal. _________________ Tiskanje sudoku |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Sre Jul 29, 2009 4:57 pm Naslov sporočila: |
|
|
res je,
vrednost sem pogledal samo za *pdata[0] in tukaj seveda deluje,
imel sem v kodi tudi ostala dva primera, samo nisem pogledal če sta vrednosti pravi
torej pri dostopu do elemntov rabiš oklepaje!
(*pdata)[0] = 11;
(*pdata)[1] = 12;
(*pdata)[2] = 13;
@domen: si to opazil iz glave ali si poskusil? |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Čet Jul 30, 2009 10:22 am Naslov sporočila: |
|
|
Najprej iz glave, pa nisem bil 100%, in sem tudi poskusil. _________________ Tiskanje sudoku |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Pet Jul 31, 2009 9:48 pm Naslov sporočila: |
|
|
ja ta način uporabe je res bolj za taka geek vprašanja, vsakdanji rabi pa (verjetno) ni namenjen
osebno zdaj več casa pišem v C#, ker so projekti taki, ampak sem zelo veliko časa pisal v C++ in česa takega nikoli nisem rabil
so pa bolj zanimive stvari kot so:
- kazalci na C funkcije
- kazalci na C++ (member) funkcije so tudi super (C# ima v ta namen delegate funkcije)
- sinhronizacija thread-ov je v C++ lahko zelo zaj...
Pa lep pozdrav,
Gregor |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|