Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++ ja funktioiden parametrit

Sivun loppuun

Antti Laaksonen [05.11.2002 19:29:10]

#

Sattuneesta syystä on tehtävä pari C++-ohjelmaa, nyt tuli kuitenkin ongelma eteen. Kyseessä on taulukoiden välitys funktioihin. Yritin seuraavanlaista ohjelmaa:

#include <iostream>

int taulukonluku(int taulukko[],int indeksi);

int main(int argc, char *argv[]) {
   int taulukko[100];
   taulukko[10]=125;
   cout << taulukko[10]; //toimii
   cout << taulukonluku(taulukko[],10); //ei toimi
   return 0;
}

int taulukonluku(int taulukko[],int indeksi){
   return taulukko[indeksi];
}

taulukonluku-funktio ilmoittaa sille annetun taulukon muuttujassa indeksi määrätyn arvon. Tuolla tavalla tehtynä ohjelma ei kuitenkaan toimi, vaan se antaa funktiota kutsuvalla rivillä virheilmoituksen:

[Warning] In function `int main(int, char **)': parse error before `]'

Eli miten taulukkoja voisi välittää funktioihin? Vai onko jotain parempaa tapaa toteuttaa vastaavanlainen ohjelma, kun taulukko voi olla melko iso?

Vilikki [05.11.2002 21:11:16]

#

Funktiolle piti välittää tieto, joka kertoi, mistä taulukko -muuttuja alkaa. En osaa oikein selostaa, kun en enää muista oikein käsitteitä...

Vilikki [05.11.2002 21:11:41]

#

Ai niin, lieköhän se ollut nimeltään osoitin...

AK [05.11.2002 21:25:57]

#

Jos haluat esittää taulukon funktion argumenttina, sinun pitää tehdä osoitin osoittamaan sen ensimmäiseen alkioon... Esimerkkiä en valitettavasti kerkeä nyt laittamaan =(

AK [05.11.2002 21:29:21]

#

lainaus:

Ai niin, lieköhän se ollut nimeltään osoitin...

Osoitinhan se...

thefox [05.11.2002 21:58:27]

#

Näin pitäisi toimia..:

#include <iostream>

int taulukonluku(int *taulukko,int indeksi);

int main(int argc, char *argv[]) {
   int taulukko[100];
   taulukko[10]=125;
   cout << taulukko[10]; // toimii
   cout << taulukonluku(taulukko,10); // toimii ;)
   return 0;
}

int taulukonluku(int *taulukko,int indeksi){
   return taulukko[indeksi];
}

Antti Laaksonen [05.11.2002 22:46:55]

#

Joo, noinhan se toimii, kiitos :) Nyt pitäisi jo alkaa onnistua vähän monimutkaisempienkin ohjelman teko C++:lla...

Antti [06.11.2002 10:52:54]

#

Ongelmahan oli taulukko-muuttujan näkyvyys... koska taulukko muuttuja itsessään oli julistettu vasta main loopissa eikä sen ulkopuolella et voi viitata siihen muuttuja nimellä vaan sinun pitää käyttää osoitinta (pointteria)... Jos käpistelet taulukko-muuttujaa useammin julista se headerissa:

public int taulukko[100];

Jos taas et - on turha tehdä siitä julkista... molemmat tavat käy mainiosti. Tuo tapa käyttää pointteria vain saattaa tehdä sinulle temppuja teräviä mikäli julistat muuttujan johon pointteri viittaa aliohjelmassa, jonka suoritus päättyy ennenkuin kutsut aliohjelmaa, jossa muuttujaan pointterilla viitataan...

Lopuksi Java-koodaajan kommentti: Siksipä pointterit ovatkin hanurista ;)...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta