2016-07-29 12 views
-1

Sie scheinen mehr oder weniger den gleichen Zweck zu haben. Sie sagten mir, dass Zeiger nur Speicheradressen von Datenstandorten sind, so dass Sie keine großen Objekte und Daten übergeben, sondern nur eine Zahl übergeben. aber ich kann immer noch nicht den Unterschied sehen.Sind Zeiger genau so wie globale Variablen?

bitte erklären.

+2

Sie sind völlig separate Konzepte. Das eine ist ein Konzept der Erinnerung und das andere ist ein Konzept des Umfangs. – 4castle

+0

@ 4castle Sie sollten das in eine Antwort umwandeln und darauf eingehen - ich vermute, dass der OP den Unterschied zwischen den beiden vielleicht nicht versteht. – templatetypedef

+2

Hier ist eine sehr gute Antwort: http://stackoverflow.com/questions/1892198/whats-the-difference-between-pointers-and-global-variables-in-c –

Antwort

2

Nein, sie sind nicht identisch, da Sie Zugriff auf den Zeiger benötigen, um darauf zuzugreifen, auf was er zeigt.

Wenn Sie den Zeiger nicht global machen, können Sie nicht von überall auf das zugreifen, auf das er zeigt.

+1

Auch dann müssen die Daten auch global sein damit der Zeiger nicht auf etwas zeigt, das als Müll gesammelt wurde. – 4castle

0

Ich gehe davon aus, dass Sie über C++ sprechen. Zeiger sind nicht global, es sei denn, Sie weisen sie einer globalen Variablen zu. Hier ist ein Beispiel in c und sollte das gleiche in C++ sein:

#include <stdio.h> 

int x = 5; //Global variable 
int* x_pointer = &x; //global pointer that holds the address of x 

int main() { 
    int y = 43; //Local variable 
    int* y_pointer = &y; //local pointer that holds the address of y 
    return 0; 
} 

Hoffe, das hilft!

1

Ein Zeiger ist ein Variablentyp, der eine Speicheradresse speichert. Sie können wie jede andere Variable einen Gültigkeitsbereich haben. Eine globale Variable ist eine Variable mit globalem Gültigkeitsbereich, dh sie kann von überall aus aufgerufen werden.

Nur weil ein Zeiger global ist, heißt das nicht, dass die Daten im Speicher global sind. Wenn die Daten im Speicher unbrauchbar sind und nicht in den Gültigkeitsbereich fallen (z. B. von einer if Anweisungsendung oder einer function Endung), zeigt der Zeiger nun auf wiedergewonnenen Speicher, und der Wert an dieser Speicheradresse ist unvorhersehbar.

Wenn überhaupt, werden Zeiger normalerweise verwendet, um lokale Variablen ohne zu teilen, die eine globale Variable erstellen. Stattdessen übergeben Sie nur den Zeiger an Funktionen, die Sie möchten, um den Wert mit zu teilen.