Outo C -kielinen määrittely ?

Anonyymi

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];

4

1053

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    1. Miehille kysymys

      Onko näin, että jos miestä kiinnostaa tarpeeksi niin hän kyllä ottaa vaikka riskin pakeista ja osoittaa sen kiinnostukse
      Tunteet
      134
      3879
    2. Miksi kaivattusi on

      erityinen? ❤️‍🔥
      Ikävä
      85
      1905
    3. Olen tosi outo....

      Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap
      Ikävä
      15
      1771
    4. Haluaisin jo

      Myöntää nämä tunteet sinulle face to face. En uskalla vain nolata itseäni enää. Enkä pysty elämäänkin näiden kanssa jos
      Ikävä
      54
      1412
    5. Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta

      https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi
      Kotka
      46
      1337
    6. Ylen uutiset Haapaveden yt:stä.

      Olipas kamalaa luettavaa kaupungin irtisanomisista. Työttömiä lisää 10 tai enempikin( Mieluskylän opettajat). Muuttavat
      Haapavesi
      130
      1323
    7. VENÄJÄ muuttanut tänään ydinasetroktiinia

      Venäjän presidentti Vladimir Putin hyväksyi tiistaina päivitetyn ydinasedoktriinin, kertoo uutistoimisto Reuters. Sen mu
      Maailman menoa
      99
      1280
    8. Nainen olet valoni pimeässä

      valaiset tietäni tietämättäsi ❤️
      Ikävä
      70
      1166
    9. Mitä toivot

      Tulevilta päiviltä?
      Ikävä
      69
      1033
    10. Hommaatko kinkkua jouluksi?

      Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k
      Sinkut
      113
      1022
    Aihe