www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Inicializacija pointerja na int array v C-ju
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Pet Mar 21, 2008 9:39 am    Naslov sporočila:   Odgovori s citatom

Sokrat je napisal/a:
Domnevam, da je tvoj odgovor misljen splosno in ne za konkretno vprasanje/temo Confused

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! Wink

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) Wink

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Pet Mar 21, 2008 9:46 am    Naslov sporočila:   Odgovori s citatom

GJ je napisal/a:

Seveda podpirajo..
Kar pa ni nujno v primeru, če je prevajalnik pisan za male procesorje.
Drugače pa glej..
http://www.hermetic.ch/cfunlib/arrays/arrays.htm
http://www.cs.cf.ac.uk/Dave/C/node11.html
http://www.fftw.org/fftw3_doc/Dynamic-Arrays-in-C.html
Še ena forumska tema:
http://www.dreamincode.net/forums/showtopic14146.htm

LP GJ


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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Pet Mar 21, 2008 10:02 am    Naslov sporočila:  Re: Inicializacija pointerja na int array v C-ju Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Pet Mar 21, 2008 10:51 am    Naslov sporočila:   Odgovori s citatom

chaos je napisal/a:
Pozorno preberi moj post --!

Uredu.. Laughing
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.. Confused
Če recimo pogledaš Atmelov MCU AT91SAM9RL in njegovo razvojno ploščo boš videl, da ima plošča 64Mbytes SDRAMa in 256MBytov FLASHa. Laughing
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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gregoral
Član
Član



Pridružen-a: Pet 24 Nov 2006 9:42
Prispevkov: 688
Aktiv.: 3.04
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jul 28, 2009 12:27 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
domen_puncer
Član
Član



Pridružen-a: Čet 01 Maj 2008 13:30
Prispevkov: 78
Aktiv.: 0.37
Kraj: Ljubljana, Mozirje

PrispevekObjavljeno: Tor Jul 28, 2009 10:01 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
gregoral
Član
Član



Pridružen-a: Pet 24 Nov 2006 9:42
Prispevkov: 688
Aktiv.: 3.04
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jul 29, 2009 4:57 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
domen_puncer
Član
Član



Pridružen-a: Čet 01 Maj 2008 13:30
Prispevkov: 78
Aktiv.: 0.37
Kraj: Ljubljana, Mozirje

PrispevekObjavljeno: Čet Jul 30, 2009 10:22 am    Naslov sporočila:   Odgovori s citatom

Najprej iz glave, pa nisem bil 100%, in sem tudi poskusil.
_________________
Tiskanje sudoku
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
gregoral
Član
Član



Pridružen-a: Pet 24 Nov 2006 9:42
Prispevkov: 688
Aktiv.: 3.04
Kraj: Ljubljana

PrispevekObjavljeno: Pet Jul 31, 2009 9:48 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
Pojdi na:  
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