Zeiger funktioniert nicht

Gast #4118310
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
#4118339
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
#4118348
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
Gast #4118355
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)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.