Mitä seuraavassa C -koodissa tekee määrittely:
double (*mdct_enc)[18] = mdct_enc_long[gr][ch];
?
Jos siinä olisi erikseen ensin:
double mdct_enc[18];
ja sitten:
mdct_enc[18] = mdct_enc_long[gr][ch];
niin silloin se ilmeisesti määrittelisi 18 -alkioisen taulukon, jossa kukin elementti (numeroitu väliltä 0-17) on double -tyyppiä (eli 8 -tavuinen IEEE -liukuluku).
Ja tuo erillinen sijoituslause hakee toisesta, 2-ulotteisesta taulukosta arvon ja sijoittaa sen elementtiin 18 (mitä ei ole olemassa, kun suurin sallittu on 17, kun indeksointi alkaa C -kielessä 0:sta).
C -kielessä * tarkoittaa osoitinta (koska tässä asiayhteydessä kyse ei ole kertolaskusta).
Mutta jos tuo määritteleekin osoittimen 18 -alkioiseen taulukkoon liukuluvuista, niin eikö silloin ole virhe tehdä heti samalla lauseella sijoitus osoittimen osoittamaan paikkaan ilman, että osoittimelle ensin varataan tilaa esim. malloc() -funktiolla ?
Ylläoleva "double (*mdct_enc)[18]" -määrittely on kopioitu allaolevasta C -koodista.
ja ei, kun ".c"-tiedostossa on tuollaista koodia, niin vastaavassa ".h" -tiedostossa ei ole lainkaan mainittu identidieriä mdct_enc
Koodia tässä:
for (gr = 0; gr < mode_gr; gr )
{
int pre_gr = gr_idx[gr ];
int cur_gr = gr_idx[gr 1];
for (ch = 0; ch < stereo; ch )
{
double (*mdct_enc)[18] = mdct_enc_long[gr][ch];
Outo C -kielinen määrittely ?
4
1014
Vastaukset
- Anonyymi
Omaan silmääni mdct_enc näyttää pointterilta double[18] taulukkoon. jonka arvoksi sijoitetaan mdct_enc_long[gr][ch]:n osoite.
> Mutta jos tuo määritteleekin osoittimen 18 -alkioiseen taulukkoon liukuluvuista, niin eikö silloin ole virhe tehdä heti samalla lauseella sijoitus osoittimen osoittamaan paikkaan ilman, että osoittimelle ensin varataan tilaa esim. malloc() -funktiolla ?
Sijoitus tehdään itse osoittimeen, ei osoittimen osoittamaan paikkaan.- Anonyymi
Hetken sai hakea, mutta jotta sijoitus onnistuisi, on mdct_enc_long tyyppiä:
double (*mdct_enc_long[10][2])[18] = {0};
-eli saadaan pointteri array-alkioon 18-elementtisessä arrayssa, oisko vaikka mixeri, jossa 18 kanavaa, yksi valitaan?
-rumaa ja tiukkaa koodia - toisaalta ei vahingossa tule kirjoitettua vääränlaisia pointtereita, kun tuo "18" pitää olla mukana.. - Anonyymi
En käsitä miksi tähän pitäisi sotkea malloc() mukaan. Ehkä asia on helpompi ymmärtää näin pienemmässä mittakaavassa.
#include <stdio.h>
int main(int argc, char **argv) {
char v[] = "Testi";
char *p[3];
p[1] = &v[3];
printf("Pointerin *p arvo on: %c\n", *p[1] );
return 0;
}
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Katso: Ohhoh! Miina Äkkijyrkkä sai käskyn lähteä pois Farmi-kuvauksista -Kommentoi asiaa: "En ole.."
Tämä oli shokkiyllätys. Oliko tässä kyse tosiaan siitä, että Äkkijyrkkä sanoi asioita suoraan vai mistä.... Tsemppiä, Mi1355479- 333375
Haluan jutella kanssasi Nainen
Olisiko jo aika tavata ja avata tunteemme...On niin paljon asioita joihin molemmat ehkä haluaisimme saada vastaukset...O171883Poliisiauto Omasp:n edessä parkissa
Poliisiauto oli parkissa monta tuntia Seinäjoen konttorin edessä tänään. Haettiinko joku tai jotain pankista tutkittavak231855Onko mies niin,
että sinulle ei riitä yksi nainen? Minulle suhde tarkoittaa sitoutumista, tosin eihän se vankila saa olla kummallekaan.211699Voitasko leikkiä jotain tunnisteleikkiä?
Tietäisi ketä täällä käy kaipaamassa.. kerro jotain mikä liittyy sinuun ja häneen eikä muut tiedä. Vastaan itsekin kohta731548Tietysti jokainen ansaitsee
Hän varmasti ansaitsee vain parasta ja sopivinta tietenkin, suon sen onnen hänelle enemmän kuin mielelläni. Aika on nyt131447Haluisin suudella ja huokailla
ja purra kaulaasi ja rakastella sinua. Haluisin puristella rintojasi ja pakaroitasi. Ei sinulla taida olla kuitenkaan ni161327Armi Aavikko Malmin hautausmaa
Haudattiinko Armi arkussa Malmin hautausmaalle vai tuhkattiinko hänet? Kuka tietää asiasta oikein?111326Miksi näin?
Miksi vihervassut haluaa maahan porukkaa jonka pyhä kirja kieltää sopeutumisen vääräuskoisten keskuuteen? Näin kotoutumi211295