Forum: Mikrocontroller und Digitale Elektronik Zeiger funktioniert nicht


von Sascha (Gast)


Lesenswert?

Hallo,
ich möchte eine Variable in einer anderen Funktion, welche in einer 
anderen Datei steht verändern. Aber natürlich funktioniert das nicht.
Datei A
1
int *pointer = 0;
2
...
3
...
4
calc(pointer);
5
...

Wobei calc eine Funktion in einer dritten Datei ist.

Datei B
1
...
2
*pointer = 10;
3
...

Aber es kommt der Fehler: Unable to resolve identifier pointer

was ist daran Falsch?

Sascha

von Fritz G. (fritzg)


Lesenswert?

In der Datei B (oder einem .h File, welches dort eingebunden wird) muss 
dem Compiler gesagt werden, dass es die Variable pointer gibt. Woher 
soll er das wissen?
1
extern int *pointer;

von Falk B. (falk)


Lesenswert?


von Walter S. (avatar)


Lesenswert?

Sascha schrieb:
> int *pointer = 0;

du setzt den Pointer auf 0 und schreibst dann mit

Sascha schrieb:
> *pointer = 10;

auf die Adresse 0 den Wert 10

Du willst was anderes

von Georg G. (df2au)


Lesenswert?

Sascha schrieb:
> int *pointer = 0;

Bist du sicher, dass dein Pointer an der Adresse 0 liegen soll? Oder 
meintest du vielleicht

int   *ptr;
*ptr = 0;

und wolltest der Variablen, auf die ptr zeigt, den Wert 0 zuweisen?

von Pointer Anfänger (Gast)


Lesenswert?

Georg G. schrieb:
> Bist du sicher, dass dein Pointer an der Adresse 0 liegen soll? Oder
> meintest du vielleicht

Käse.

Sein Pointer liegt nicht auf Adresse 0 sondern zeigt dort hin.

von Falk B. (falk)


Lesenswert?

@ Georg G. (df2au)

>> int *pointer = 0;

>Bist du sicher, dass dein Pointer an der Adresse 0 liegen soll?

Nö. Denn WO der Pointer liegt, sieht man hier sowieso nicht. Aber er 
ZEIGT nach 0 (Inhalt des Pointers).

>Oder meintest du vielleicht

>int   *ptr;
>*ptr = 0;

>und wolltest der Variablen, auf die ptr zeigt, den Wert 0 zuweisen?

Dazu sollte man den Pointer aber erstmal sinnvoll zuweisen ;-)
Man muss aber schon sagen, dass die C-Schreibweise hier ziemlich 
irreführend ist. Und man sollte wissen, dass bei der Deklaration der nur 
der Pointer initialisiert werden kann, NICHT jedoch auf das Ziel des 
Pointers (klingt logisch, die Schreibweise suggeriert aber was 
anderes!).
1
int a;          // einfache Variable
2
int *pointer;   // Deklaration, Pointer auf int
3
int *pointer = 123;   // Deklaration, Pointer auf int, Pointer wird mit 123 initialtisiert und zeigt damit auf Speicherzelle 123
4
*pointer = 456;   // Zugriff auf Speicherzelle über Pointer, das Ziel, worauf Pointer zeigt (ein int) wird auf 456 gesetzt
5
pointer = &a;   // pointer zeigt jetzt auf a

von Pointer Anfänger (Gast)


Lesenswert?

Pointer Anfänger schrieb:
> Sein Pointer liegt nicht auf Adresse 0 sondern zeigt dort hin.

Das ist auch Käse. Tschuldigung.

von Fritz G. (fritzg)


Lesenswert?

Aber nicht weil er *pointer=0 geschrieben hat, sondern weil er immer auf 
0 zeigt (falls der Compiler so initialisiert).

Wenn schon,  soll es so aussehen:
1
int *pointer; // zeigt irgendwo hin, aber der Compiler wird das vielleicht   auf 0 setzen
2
int a=3; 
3
pointer=&a; // erst hier zeigt pointer auf was vernünftiges
4
*pointer=10; // a wäre jetzt aber auch 10

von julius (Gast)


Lesenswert?

Redet ihr hier gerade über einen GLOBALEN Pointer?

Ick glob ick versteh dit nich... :D

gruß und kuss der julius

by the way

ich würde es so machen
1
int GLOBALE_VARIABLE = 0;
2
3
void globalIntSet(int globalMurks)
4
{
5
  GLOBALE_VARIABLE = globalMurks;
6
  return;
7
}
8
9
int globalIntGet(void)
10
{
11
  return GLOBALE_VARIABLE;
12
}

und dann natürlich zwingend die get und set Funktion setzen, kommt einer 
selbst gestrickten Kapselung gleich (die Funktionen müssen natürlich 
beiden *.c-Files bekannt sein)

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.