Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

1

14.02.2012, 22:19

Arrayübergabe und Funktionen

Also ich bin nun seit 3 Stunden dran ARRAY_X an eine Funktion weiterzugeben und hab mich schon blöd gesucht mit Google und als letzten Ausweg seh ich nun noch euch.
Das Problem sollte der folgende Codeauschnitt nochmal verdeutlichen (auch wenn der Code keinen weiteren Sinn ergibt):


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const int ARRAY_X[3] =
{
    5,
    10,
    20,
};

void main()
{
    DoSomething1(&ARRAY_X); // Erstellfehler
    DoSomething2(ARRAY_X); // Erstellfehler
    DoSomething3(&ARRAY_X); // Erstellfehler
}

void DoSomething1(const int * Array[])
{
    int x = (*Array)[0]; // Erstellfehler
    int y = Array[1]; // Erstellfehler
}


void DoSomething2(const int & Array[])
{
    int x = (*Array)[0]; // Erstellfehler
    int y = Array[1]; // Erstellfehler
}


void DoSomething3(const int * Array)
{
    int x = (*Array)[0]; // Erstellfehler
    int y = Array[1]; // Erstellfehler
}


Hab also fast jede möglichkeit durchgetestet, aber nichts funktioniert.
Hoffe jemand kann mir dabei weiterhelfen. Danke :>

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

14.02.2012, 23:19

In Zukunft: "Erstellfehler" ist nicht das was dein Compiler sagt. Wir brauchen die genaue Fehlermeldung (1:1 rauskopiert)

DoSomething3 ist richtig, du übergibst aber bei dem Aufruf einen Zeiger auf einen Zeiger. Lass den &-Operator weg. Dann kannst du auch über Array[0] [1] und [2] auf den Inhalt zugreifen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

15.02.2012, 06:38

Na ja, es gehen alle 3 Varianten, nur müsste er auf die Elemente dann auch dementsprechend zugreifen. Variante Nummer 3 ist allerdings in der Tat die gebräuchlichste für seinen Zweck.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

4

15.02.2012, 10:37

Und für die Zukunft schonmal std::vector als Alternative zu C-Arrays vormerken, die machen einem das Leben echt einfacher, sobald man mit Klassen umgehen kann.
Lieber dumm fragen, als dumm bleiben!

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

5

15.02.2012, 15:53

das geht auch noch

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h>
   #include<conio.h>
   void read(int *,int);
   void dis(int *,int);
  
   void main()
   {
    int a[5],b[5],c[5],i;

    printf("Enter the elements of first list \n");
    read(a,5);
    printf("The elements of first list are \n");
    dis(a,5);
   }

   void read(int c[],int i)
   {
    int j;
    for(j=0;j<i;j++)
      scanf("%d",&c[j]);
    fflush(stdin);
   }

   void dis(int d[],int i)
   {
    int j;
    for(j=0;j<i;j++)
    printf("%d ",d[j]);
    printf("\n");
   }


Quelle: http://www.java2s.com/Tutorial/C/0140__A…ytofunction.htm

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

6

15.02.2012, 15:57

Mit der dritten Methode kommt dieser Fehler:

Zitat

Konvertierung des Parameters 1 von 'const int (*)[5]' in 'const int *' nicht möglich



@

Zitat

Und für die Zukunft schonmal std::vector als Alternative zu C-Arrays
vormerken, die machen einem das Leben echt einfacher, sobald man mit
Klassen umgehen kann.
Und wie macht man so ein const Array mit vectoren? Also wie macht man aus:

C-/C++-Quelltext

1
2
3
4
5
6
const int ARRAY_X[3] =
{
    5,
    10,
    20,
};


eine Vectoren Liste?


Achja die Methode von Fireball funktioniert. Aber dort wird ja das ganze Array übergeben und nicht nur ein Zeiger oder?
Edit: Ich hab nun das & weggelassen und nur das Sternchen in der Funktion gelassen. Das scheint auch zu funktionieren, aber kommt mir etwas komisch vor das sowas funktioniert...

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Teiby« (15.02.2012, 16:11)


Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

7

15.02.2012, 16:25

Vektoren lassen sich erst im neuen C++ Standard mit der Syntax { bla, bla} initialisieren. Wenn dein Compiler das noch nicht kann musst du in solchen Fällen also noch C Arrays verwenden.

Zur anderen Sache: C Arrays lassen sich nicht per Value an Funktionen übergeben. int bla[] ist in der Parameterliste identisch mit int* bla. Du übergibst also nur einen Zeiger auf der erste Element des Arrays. Der Zeiger verhält sich aber bis auf wenige Ausnahmen genauso wie ein Array.

Ciao
Helmut
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Werbeanzeige