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?
Funktiolle piti välittää tieto, joka kertoi, mistä taulukko -muuttuja alkaa. En osaa oikein selostaa, kun en enää muista oikein käsitteitä...
Ai niin, lieköhän se ollut nimeltään osoitin...
Jos haluat esittää taulukon funktion argumenttina, sinun pitää tehdä osoitin osoittamaan sen ensimmäiseen alkioon... Esimerkkiä en valitettavasti kerkeä nyt laittamaan =(
lainaus:
Ai niin, lieköhän se ollut nimeltään osoitin...
Osoitinhan se...
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]; }
Joo, noinhan se toimii, kiitos :) Nyt pitäisi jo alkaa onnistua vähän monimutkaisempienkin ohjelman teko C++:lla...
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 ;)...
Aihe on jo aika vanha, joten et voi enää vastata siihen.