Forum: Compiler & IDEs Problem bei array Zeiger Übergabe an Funktion


von Philipp M. (lord-maricek)


Lesenswert?

Moin,

ich habe ein struct array in meiner Main Funktion, und möchte dieses 
einen Zeiger auf dieses Array an eine Funktion übergeben und dann in der 
Funktion speichern. Jedoch hab ich da so meine Schwierigkeiten.
Ein Versuchs Programm:
1
#include <stdlib.h>
2
#include <stdio.h>
3
4
void p(int * zeiger[])
5
{
6
    int * pointer[10];
7
8
    *pointer = zeiger;
9
10
    for(int i=0;i<10;i++)
11
    {
12
        printf("%d\n",pointer[i]);
13
    }
14
}
15
16
int main(){
17
18
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
19
20
    p(a);
21
22
    return 0;
23
}

Ich möchte, dass das array "a[]" an die Funktion "P" übergeben wird, und 
in dem array Zeiger "pointer" speichern. Danach sollen die Zahlen aus 
"pointer" ausgegeben werden.

Kann mir jemand helfen?

MfG
Philipp

P.S.
Hab grad noch was zustande bekommen, so gehts, funtzt es aber auch 
irgentwie ohne die for schleife?
1
#include <stdlib.h>
2
#include <stdio.h>
3
4
void p(int * zeiger)
5
{
6
    int * pointer[10];
7
8
    for(int i=0;i<10;i++)
9
    {
10
        pointer[i] = zeiger+i;
11
    }
12
13
    for(int i=0;i<10;i++)
14
    {
15
        printf("%d\n",*pointer[i]);
16
    }
17
}
18
19
int main(){
20
21
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
22
23
    p(a);
24
25
    return 0;
26
}

von DirkB (Gast)


Lesenswert?

Auch das zweite Beispiel ist nicht richtig.

pointer ist ein einfaches int array:
1
 int pointer[10];

Wenn du die Daten nochmal lokal in deiner Funktion haben willst, musst 
du sie dir kopieren.
In einer Schleife oder mit memcpy().

von Philipp M. (lord-maricek)


Lesenswert?

Ahja so gehts, danke:
1
#include <stdlib.h>
2
#include <stdio.h>
3
4
void p(int * zeiger)
5
{
6
    int * pointer;
7
8
    pointer = zeiger;
9
10
    for(int i=0;i<10;i++)
11
    {
12
        printf("%d\n",pointer[i]);
13
    }
14
}
15
16
int main(){
17
18
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
19
20
    p(a);
21
22
    return 0;
23
}

von Peter II (Gast)


Lesenswert?

Philipp Maricek schrieb:
> pointer = zeiger;

und was erwartest du von dieser anweisung?

von Philipp M. (lord-maricek)


Lesenswert?

@Peter II:
Das war ne reine Testanwenung.

Ich habe ein großes Programm, das in Modulen arbeitet. Dazu speicher ich 
zentral einige Daten (unteranderem auch Arrays), die in allen Modulen 
verfügbar sein müssen. Dazu habe ich in jedem Modul Zeiger auf die 
jeweiligen Variablen, die ich in einer Init Funktion übergebe.

Das array "a" ist Zentral und alle Module sollen drauf zugreifen, die 
Funktion "p" soll ein Modul darstellen, in einer Init Funktion übergebe 
ich dann den Zeiger auf "a" und speicher ihn in pointer. (pointer ist im 
Modul nicht in einer Funktion sondern global angelegt.)

Mit pointer = zeiger, will ich einfach nur den Zeiger von "a" in dem 
zeiger "pointer" speichern.

MfG
Philipp

von Florian P. (db1pf)


Lesenswert?

Philipp Maricek schrieb:
>
> Mit pointer = zeiger, will ich einfach nur den Zeiger von "a" in dem
> zeiger "pointer" speichern.
>

Die Variable zeiger ist überflüssig, so geht's auch:
1
void p(int * pointer)
2
{
3
    for(int i=0;i<10;i++)
4
    {
5
        printf("%d\n",pointer[i]);
6
    }
7
}


Grüße,
Florian

von vll hilfts (Gast)


Lesenswert?

Vll hilfts fürs pointer/array-verständnis... Für mich ist es dann oft 
hilfreich die pointer und so auf ein Papier zu zeichnen.
1
void p(int** zeiger)
2
{
3
    int* pointer[10];
4
5
    for(int i = 0; i < 10; i++)
6
        pointer[i] = *(zeiger++); 
7
8
    for(int i = 0; i < 10; i++)
9
        printf("%d\n",*pointer[i]);
10
}
11
12
13
int main(void)
14
{ 
15
  int* a[10];
16
  int b[]= {1,2,3,4,5,6,7,8,9,0};
17
  int* pb = &b[0];
18
  
19
    for(int i = 0; i < 10; i++)
20
         a[i] = pb++;
21
22
    p(&a[0]);
23
    
24
    return 0;
25
}


 Aber das versteh ich gar nicht:

>> ich habe ein struct array in meiner Main Funktion, und möchte dieses
>> einen Zeiger auf dieses Array an eine Funktion übergeben und dann in der
>> Funktion speichern.

von Philipp M. (lord-maricek)


Lesenswert?

@vll hilfts: war oben ein bisschen doof formuliert.
Das war nur ein Testprogramm, das eigentliche Programm besteht aus 
verschiedenen Modulen. Die Variablen, die von mehreren Modulen gebraucht 
werden, definiere ich global. In den Modulen sind structe, mit pointern. 
An diese Pointer übergebe ich die Adressen der Globalen Variablen, die 
ich in dem jeweiligen  Modul brauche.

MfG
Philipp

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.