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

1173

    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ä.

    Takaisin ylös

    Luetuimmat keskustelut

    1. 6 kW saunan lämmityksestä kohta 10 euron lisämaksu / kerta

      Kokoomuslainen sähköyhtiöiden hallitsema Energiavirasto ehdottaa 5 kW:n rajaa, jonka ylittämisestä tulee lisämaksu. Tark
      Maailman menoa
      222
      6938
    2. Minja jytkyttää vas.liiton kannatusta ylöspäin

      Alkaa raavaat duunarimiehetkin palaamaan vasemmistoliiton kannattajiksi. Eduskunnassahan on vain kaksi työntekijöiden p
      Maailman menoa
      323
      4834
    3. "Mitä sä nainen tuot sitten pöytään" ?

      Jos mies provaidaa ja suojelee... Pitääkö miesten kysyä tuollaisia?
      Ikävä
      148
      3673
    4. Duunarit hylkäsivät vasemmistoliiton, siitä tuli feministinaisten puolue

      Pääluottamusmies Jari Myllykoski liittyi vasemmistoliittoon, koska se oli duunarien puolue. Sitä samaa puoluetta ei enää
      Maailman menoa
      117
      3474
    5. Ekologinen kommunismi tulee voittamaan fossiilikapitalismin

      Kiina on mahtitekijä uusiutuvien energialähteiden kehityksessä, ja Trump osoitus viimeisestä öljyn perään itkemisestä, m
      Maailman menoa
      69
      3418
    6. Mies, kerro minulle vielä jotakin aivan uniikkia

      ja ainutlaatuista minkä vain me kaksi voisimme ymmärtää jos olemme sen kokeneet ja eläneet, jotta ihan varmasti tietäisi
      Tunteet
      49
      2886
    7. Hyviäkin uutisia tulossa, hallinto-oikeus asettaa toimeenpanokieltoon

      Hyvinvointitalon työmaa pysähtyy. Rillankivi+energia ja vesi kytkyrahanpesu stoppaa. Tytäryhtiöiden hallitusjäsenet+kon
      Pyhäjärvi
      270
      2749
    8. Oikeistopuolueiden kannatus vain 37,8 %, vasemmiston 43,0 %

      Keskustaan jää 17,4 prosenttia ja loput ovat sitten mitä ovat. Mutta selvästikin Suomen kansa on vasemmalle kallellaan.
      Maailman menoa
      84
      2470
    9. Tiedän ettei

      Meistä mitään tule. Toinen oli sinulle tärkeämpi
      Ikävä
      25
      2376
    10. Gallup: Mikä on ollut mielestäsi paras tv-sarja ikinä?

      Gallup: Mikä on ollut mielestäsi paras tv-sarja ikinä? Onko se joku suomalainen viihdepläjäys, brittirikossarja, amerikk
      Tv-sarjat
      101
      1951
    Aihe