2016-07-29 133 views
-1

彼らは多かれ少なかれ同じ目的を持っているようです。 ポインタはデータ位置のメモリアドレスにすぎないので、大きなオブジェクトやデータを渡すのではなく、番号を渡すだけです。 でもまだ違いは見えません。ポインタはグローバル変数とまったく同じですか?

どうぞ、ご説明ください。

+2

これらは完全に別個の概念です。 1つはメモリの概念であり、もう1つはスコープの概念です。 – 4castle

+0

@ 4castleあなたはそれを答えに変換し、それを精緻化する必要があります - 私はOPが両者の違いを理解していないかもしれないと思っています。 – templatetypedef

+2

これは非常に良い答えです:http://stackoverflow.com/questions/1892198/whats-the-difference-between-pointers-and-global-variables-in-c –

答えて

2

いいえ、ポインターにアクセスする必要があるため、ポインターにアクセスする必要はありません。

ポインタをグローバルにしない限り、ポインタがどこからでもアクセスできるわけではありません。

+1

それでも、データはグローバルにする必要もありますポインタがガベージコレクションされたものを指していないようにします。 – 4castle

0

私はあなたがC++について話していると仮定します。ポインターは、グローバル変数に割り当てない限り、グローバルではありません。以下はcの例であり、C++と同じである必要があります。

#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; 
} 

これは役に立ちます。

1

ポインタは、メモリアドレスを格納する変数の型です。他の変数と同様にスコープを持つことができます。 A グローバル変数はグローバルスコープの変数で、どこからでもアクセスできます。

ポインタがグローバルであるという理由だけで、メモリ内のデータがグローバルであるとは限りません。メモリ内のデータが範囲外になることからガベージコレクトされた場合(例えば、ifステートメント終了またはfunction終了時)、ポインタは再使用メモリを指し示し、そのメモリアドレスの値は予測できません。

何かがある場合は、ローカル変数を共有する方法としてポインタが一般的に使用され、はグローバル変数を作成しません。代わりに、あなたはを望む関数へのポインタを渡すだけでと値を共有します。

関連する問題