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 1, 2  Naslednja
 
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
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

PrispevekObjavljeno: Čet Mar 20, 2008 11:01 pm    Naslov sporočila:  Inicializacija pointerja na int array v C-ju Odgovori s citatom

Kako inicializirati pointer na int array pdata, da bo kazal na data?

int data[3] = {1,2,3};

int (* pdata)[3] = ?


Z trivialnim

int (* pdata)[3] =data;

se en prevajalnik pritožuje z
"dig_filter_2nd.c (20): error: #144: a value of type "int *" cannot be used to initialize an entity of type "int (*)[3]""

drugi pa z

initialization from incompatible pointer type filter_2nd/src dig_filter_2nd.c line 20
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.42

PrispevekObjavljeno: Čet Mar 20, 2008 11:07 pm    Naslov sporočila:   Odgovori s citatom

int *pdata;

pdata=&data[0];

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

PrispevekObjavljeno: Čet Mar 20, 2008 11:19 pm    Naslov sporočila:   Odgovori s citatom

Hvala gumby, to sicer vem.

Me pa zanima ta pointer na int array. Zadevo sem srečal na embedded quiz in mi ne da miru. Think
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.42

PrispevekObjavljeno: Čet Mar 20, 2008 11:39 pm    Naslov sporočila:   Odgovori s citatom

Kako misliš pointer na array? Saj ne more kazat na vse tri elemente hkrati... Confused Question
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

PrispevekObjavljeno: Čet Mar 20, 2008 11:43 pm    Naslov sporočila:   Odgovori s citatom

Pointer kaže seveda samo na en element naenkrat, bi pa z indexom array-a povedal na točno katerega.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.42

PrispevekObjavljeno: Čet Mar 20, 2008 11:48 pm    Naslov sporočila:   Odgovori s citatom

int data[3]={1,2,3};
int *pdata[3];

pdata[0]=&data[0];
pdata[1]=&data[1];
pdata[2]=&data[2];


to?

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Čet Mar 20, 2008 11:51 pm    Naslov sporočila:   Odgovori s citatom

Gumbyjev prvi odgovor je bil pravilen - array ni nic drugega, kot pointer na nekaj z znano dolizno elementa. Pointer na pointer necesa bi blo malce smesno (a se zgodi - argv recimo), ampak ne na tak nacin, kakor si ti napisal.

pdata mora biti pointer na podatek iste sirine, kot je dimenzija elementa arraya, kazati mora na nicti naslov (= prvi element). Vsakic, ko ta pointer povecas, bo kazal naslednji element, z ustreznim indeksom pa bo kazal poljubni element v array-u.

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.42

PrispevekObjavljeno: Čet Mar 20, 2008 11:54 pm    Naslov sporočila:   Odgovori s citatom

(pdata+x) bo kazal na x-ti element
*(pdata+x) je pa enako, kot data[x]

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-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 1:12 am    Naslov sporočila:   Odgovori s citatom

gumby je napisal/a:
int data[3]={1,2,3};
int *pdata[3];

pdata[0]=&data[0];
pdata[1]=&data[1];
pdata[2]=&data[2];


Če delaš tako, imaš veliko možnost, da ti procesor zablokira -- neinicializiran pointer!

Če hočeš pointer na array, v zgornjem primeru narediš samo:
Koda:
int data[3]={1,2,3};
int *pdata;

pdata = data;


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 1:17 am    Naslov sporočila:  Re: Inicializacija pointerja na int array v C-ju Odgovori s citatom

alessio je napisal/a:
Kako inicializirati pointer na int array pdata, da bo kazal na data?

int data[3] = {1,2,3};

int (* pdata)[3] = ?


Z trivialnim

int (* pdata)[3] =data;

...


Pointer inicializiraš tako:
pdata = data;
Bolj preprosto že ne gre Smile (kot je že napisal Sokrat, tudi data je v bistvu pointer ...)

Kje si pa videl način, kakor si naredil ti (int (* pdata)[3] =data;) ?? Tukaj imaš pointer na array pointerjev ...

LP!
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 1:47 am    Naslov sporočila:   Odgovori s citatom

Sokrat je napisal/a:
Gumbyjev prvi odgovor je bil pravilen - array ni nic drugega, kot pointer na nekaj z znano dolizno elementa.

To ne drži v celoti.
Pointer lahko kaže na začetek tipiziranega zapisa. Dolžina zapisa ni nujno vnaprej določena! Določena je le struktura zapisa!
Lep primer je recimo pointer na string, ki ga zaključuje byte (karakter) z vrednostjo vrednost 0, torej nima vnaprej določene dolžine.
Vsa dinamična polja (array-i) kar se tiče dolžine niso statična, ker se vsebina in znjo tudi dolžina po času lahko spreminja.

Sokrat je napisal/a:
Pointer na pointer necesa bi blo malce smesno (a se zgodi - argv recimo), ampak ne na tak nacin, kakor si ti napisal.

Mah lomiš ga..
Pointer na pointer je klasika objektnega programiranja, ta kaže na prvi poiter v pointer listi class-a nekega objekta! Pa tudi dinamični string ni nič drugega kot pointer na pointer.

Sokrat je napisal/a:
Vsakic, ko ta pointer povecas, bo kazal naslednji element, z ustreznim indeksom pa bo kazal poljubni element v array-u.

To velja le za tipizirane pointerje! Increment netipiziranega pointerja pa ti kaže na naslednji byte!

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 2:00 am    Naslov sporočila:   Odgovori s citatom

GJ je napisal/a:
Sokrat je napisal/a:
Gumbyjev prvi odgovor je bil pravilen - array ni nic drugega, kot pointer na nekaj z znano dolizno elementa.

To ne drži v celoti.
Pointer kaže na začetek tipiziranega zapisa. Dolžina zapisa ni nujno vnaprej določena! Določena je le struktura zapisa!
Lep primer je recimo pointer na string, ki ga zaključuje byte (karakter) z vrednostjo vrednost 0, torej nima vnaprej določene dolžine.
Vsa dinamična polja (array-i) kar se tiče dolžine niso statična, ker se vsebina in znjo tudi dolžina po času lahko spreminja.

To ne drži v celoti Smile

C ne pozna dinamičnih array-ev. Vsak array ima točno določeno velikost oz. bolje rečeno rezerviran pomnilnik, lahko ga pa (po želji) uporabljaš manj ali (na lastno odgovornost) več. Seveda ga lahko povečaš / zmanjšaš, a v vsakem primeru ima neko fiksno dolžino ...

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

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

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š.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

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

GJ je napisal/a:
Lep primer je recimo pointer na string, ki ga zaključuje byte (karakter) z vrednostjo vrednost 0, torej nima vnaprej določene dolžine.


Jaz v vprasanju in Gumbyjevem odgovoru vidim array tipa int. Kje vidis razlicne dolizne elementov ?

Citiram:
Sokrat je napisal/a:
Vsakic, ko ta pointer povecas, bo kazal naslednji element, z ustreznim indeksom pa bo kazal poljubni element v array-u.


To velja le za tipizirane pointerje! Increment netipiziranega pointerja pa ti kaže na naslednji byte!


Jaz v vprasanju in Gumbyjevem odgovoru vidim pointer na vrednost tipa int. Kaj vidis ti ?

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

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

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit 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 9:22 am    Naslov sporočila:   Odgovori s citatom

chaos je napisal/a:
To ne drži v celoti SmileC ne pozna dinamičnih array-ev. Vsak array ima točno določeno velikost oz. bolje rečeno rezerviran pomnilnik, lahko ga pa (po želji) uporabljaš manj ali (na lastno odgovornost) več. Seveda ga lahko povečaš / zmanjšaš, a v vsakem primeru ima neko fiksno dolžino ...

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
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 1, 2  Naslednja
Stran 1 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