Gå til innhold

Feil ved passering og returnering av array


Anbefalte innlegg

Jeg holder på og lære meg det basiske om arrays og holder på og lage et lite testeprogram. Det jeg skal er å bruke en funksjon til å få tak i data, og en til og vise. Jeg har komt fram til dette

 

#include <iostream>
using namespace std;

int getdata(int tall[2]);
void display(int res[2]);


int main() {
   int tall[2];
   int res[2];
   
   res[2] = getdata(tall);
   display(res);
   
   system("pause");
   return 0;
}

int getdata(int tt[2]) {
   for(int d = 0; d < 2; d++) {
           cout << "Tall: ";
           cin >> tt[d];
           }
   return tt[2];
}

void display(int rr[2]) {
    for(int i = 0; i < 2; i++) {
            cout << rr[i];
            }
            }

 

men tingen er at det jeg får tilbake er masse tall, ikke de tallene som jeg skrev inn.

 

og ja, programmerer på windows.

Lenke til kommentar
Videoannonse
Annonse

Er fordi du passerer en tabell som du fyller med verdier, og en annen som du viser. Hvis du kaller display og getData funksjonen med samme tabell blir det bra.

 

Edit: la ikke først merke til at du retunerer tabellen. Ikke gjør det, bare passer den og ha void på funksjonen. Tabeller er pass by reference, så verdiene vil endre seg uansett.

Endret av Herr_Dude
Lenke til kommentar

slik kan du gjøre det, ved å bruke tabellen som ut-argument for funksjonen. Du sender tabellen med adresseoverføring i begge funksjoner, men merker i skrivut-funksjonen tabellen som konstant, for å markere at ingen endring skal kunne finne sted. slik blir funksjonene mer generelle, i stedet for å kreve akkurat 2 elementer :)

 

#include <iostream>
using namespace std;

void getdata(int *tall, int antallTall);
void display(const int *tall, int antallTall);


int main() {
  int tall[2];
  
  getdata(tall, 2);
  display(tall, 2);
  
  system("pause");
  return 0;
}

void getdata(int *tall, int antallTall) {
  for (int d = 0; d < antallTall; d++) {
          cout << "Tall: ";
          cin >> tall[d];
          }
}

void display(const int *tall, int antallTall) {
   for(int i = 0; i < antallTall; i++) {
           cout << tall[i] << endl;
           }
}

Lenke til kommentar
   res[2] = getdata(tall);

Whoha! Siden getdata(...) returnerer en integer, så prøver programmet ditt å stappe inn en integer på tredje plassen i arrayen res. Ikke bare er det konseptuelt feil, men siden res kun har to plasser, så er det å be om at programmet kræsjer (eller gjør noe uforutsigbart).

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...