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

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Čet Mar 20, 2008 11:01 pm Naslov sporočila: Inicializacija pointerja na int array v C-ju |
|
|
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 |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Čet Mar 20, 2008 11:07 pm Naslov sporočila: |
|
|
int *pdata;
pdata=&data[0]; _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Čet Mar 20, 2008 11:19 pm Naslov sporočila: |
|
|
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.  |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Čet Mar 20, 2008 11:39 pm Naslov sporočila: |
|
|
Kako misliš pointer na array? Saj ne more kazat na vse tri elemente hkrati...  _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Čet Mar 20, 2008 11:43 pm Naslov sporočila: |
|
|
Pointer kaže seveda samo na en element naenkrat, bi pa z indexom array-a povedal na točno katerega. |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Čet Mar 20, 2008 11:48 pm Naslov sporočila: |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Mar 20, 2008 11:51 pm Naslov sporočila: |
|
|
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 |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Čet Mar 20, 2008 11:54 pm Naslov sporočila: |
|
|
(pdata+x) bo kazal na x-ti element
*(pdata+x) je pa enako, kot data[x] _________________ Tule nisem več aktiven. |
|
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 1:12 am Naslov sporočila: |
|
|
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 |
|
 |
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 1:17 am Naslov sporočila: Re: Inicializacija pointerja na int array v C-ju |
|
|
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 (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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Pet Mar 21, 2008 1:47 am Naslov sporočila: |
|
|
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 |
|
 |
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 2:00 am Naslov sporočila: |
|
|
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
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 |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Pet Mar 21, 2008 6:31 am Naslov sporočila: Re: Inicializacija pointerja na int array v C-ju |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pet Mar 21, 2008 9:17 am Naslov sporočila: |
|
|
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
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)  _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
|
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
|