Avatar billede nubi19 Nybegynder
12. september 2002 - 22:04 Der er 11 kommentarer og
2 løsninger

Arrays i funktioner ?

Hvis jeg nu har en funktion:

void funktion(int array[])
{
}

og en

void main(void)
{
  int array[1000];
  funktion(array);
}

Så kommer array'et med de 1000 plads aldrig over i funktionen, hvis jeg f.eks. tager sizeof(array)/4 i main så giver den 1000 (underligt nok, jeg ville da mene man burde dividere med 2 kun, idet en int er 16 bit = 2 byte, men pyt), mens den giver 0 i funktionen.

Så hvordan får jeg smidt det array over i funktionen ?

Og endnu bedre, hvordan får jeg funktionen til at enten redigere array'et direkte (prøvede at skrive & array[]) men det godtog den ikke, eller til at returnere det nye array.

Jeg er ved at lave en sorterings funktion (good old bubble sort)
Avatar billede krukken Juniormester
12. september 2002 - 22:05 #1
Du skla bare bruge en pointer som hedder *array!
Avatar billede nubi19 Nybegynder
12. september 2002 - 22:06 #2
Hov btw. det må ikke kræve hverken ms VC eller BCB, idet jeg gerne vil holde mig til ansi C++
Avatar billede krukken Juniormester
12. september 2002 - 22:06 #3
Jeg laver lige et eksempel til dig! to min
Avatar billede krukken Juniormester
12. september 2002 - 22:07 #4
Øhh, hvad var det til mig?
Avatar billede nubi19 Nybegynder
12. september 2002 - 22:10 #5
har prøvet følgende:

void funktion(int *array)
{}

void main(void)
{
  int array[100];
  funktion(array);
}

Og det duer ikke, har også prøvet at lave en pointer i main, som peger på array'et, og det duer heller ikke.
Avatar billede nubi19 Nybegynder
12. september 2002 - 22:12 #6
Det med ms vc & bcb var bare generelt, dvs. undlad venligst at bruge kommandoer der er compiler betingede.
Avatar billede soreno Praktikant
12. september 2002 - 22:16 #7
prøv at kigge lidt på dette:

#include <stdio.h>

void printArray(int array[], int size)
{
  for(int i=0;i<size;i++)
  {
      printf("array[%i]: [%i]\n", i, array[i]);
  }
}

void populateArray(int array[], int size)
{
  for(int i=0;i<size;i++)
  {
      array[i] = i;
  }
}

int main(int argc, char **argv)
{
  int a[100];
  int size = sizeof(a)/sizeof(a[0]);

  populateArray(a, size);
  printArray(a, size);

  return 0;
}
Avatar billede mbulow Nybegynder
12. september 2002 - 22:18 #8
Hmm... Hvorfor virker det med --> int *array <-- ikke?

Jeg har lige lavet den her lille stump kode, og den funger fint.
OK der står måske en del i koden, men det er blot for at fylde arrayet op med tal, og skrive dem ud :)
Måden at kalde "funktion" er identisk med din egen



#include <iostream>

using namespace std;

void funktion(int *array){
    for(int i = 0; i < 100; i++)
        cout << array[i] << endl;
}

void main(){
    int array[100];

    for(int i = 0; i < 100; i++)
        array[i] = i;

    funktion(array);
}
Avatar billede nubi19 Nybegynder
12. september 2002 - 22:26 #9
Tror hele fejlen lå i at jeg ikke gav størrelsen på arrayet med.
Så takker tusind gange for jeres hjælp :)
Avatar billede nubi19 Nybegynder
12. september 2002 - 22:27 #10
HOVSA glemte jo næsten det vigtigste, hvordan får jeg den til at returnere array'et eller evt. redigere det direkte ?
Avatar billede planetdb Nybegynder
12. september 2002 - 22:30 #11
eller kig på dette:

#include <iostream.h>
#include <stdlib.h>

      void vis_array(int array[], int antal)
        {
          for (int i = 0; i < antal; i++)
            {
              // Sætninger...
              cout << array[i] << endl;
            }
        }

int main()
{
      int array[5] = { 1, 2, 3, 4, 5 };

      vis_array(array, 5);
      return 0;
}
Avatar billede mbulow Nybegynder
13. september 2002 - 01:25 #12
Faktisk er det sådan at når du opretter et array, f.eks.:
    int array[100];
Så er indeholder 'array'-variablen, adressen på det første element i arrayet, ud fra hvilken man kan finde frem til alle de andre elementer.

Når du så sender arrayet til en funktion, f.eks.:
    void FillArrayWithZero(int array[], size){
        for(int i = 0; i < size; i++)
          array[i] = 0;
    }
ved at skrive:
    FillArrayWithZero(array, 100);
er det reelt set adressen til arrayet du sender, og derfor arbejder du direkte på arrayets indhold, og IKKE en kopi.



Prøv den her stump kode, så kan du se hvad jeg mener





#include <iostream>

using namespace std;

void FillArrayWithZero(int array[], int size){
  for(int i = 0; i < size; i++)
      array[i] = 0;
}

void ShowArray(int array[], int size){
  for(int i = 0; i < size; i++)
      cout << array[i] << endl;
}

void main(){
  int array[5] = {1, 2, 3, 4, 5};

  cout << "Det originale indhold:" << endl;
  ShowArray(array, 5);

  FillArrayWithZero(array, 5);
  cout << "Nu skulle det være fyldt med 0er:" << endl;
  ShowArray(array, 5);
}
Avatar billede nubi19 Nybegynder
13. september 2002 - 15:05 #13
Ahh det kan jeg jo godt se, min funktion fungerer også nu, så takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester