彼らは多かれ少なかれ同じ目的を持っているようです。 ポインタはデータ位置のメモリアドレスにすぎないので、大きなオブジェクトやデータを渡すのではなく、番号を渡すだけです。 でもまだ違いは見えません。ポインタはグローバル変数とまったく同じですか?
どうぞ、ご説明ください。
彼らは多かれ少なかれ同じ目的を持っているようです。 ポインタはデータ位置のメモリアドレスにすぎないので、大きなオブジェクトやデータを渡すのではなく、番号を渡すだけです。 でもまだ違いは見えません。ポインタはグローバル変数とまったく同じですか?
どうぞ、ご説明ください。
いいえ、ポインターにアクセスする必要があるため、ポインターにアクセスする必要はありません。
ポインタをグローバルにしない限り、ポインタがどこからでもアクセスできるわけではありません。
それでも、データはグローバルにする必要もありますポインタがガベージコレクションされたものを指していないようにします。 – 4castle
私はあなたが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;
}
これは役に立ちます。
ポインタは、メモリアドレスを格納する変数の型です。他の変数と同様にスコープを持つことができます。 A グローバル変数はグローバルスコープの変数で、どこからでもアクセスできます。
ポインタがグローバルであるという理由だけで、メモリ内のデータがグローバルであるとは限りません。メモリ内のデータが範囲外になることからガベージコレクトされた場合(例えば、if
ステートメント終了またはfunction
終了時)、ポインタは再使用メモリを指し示し、そのメモリアドレスの値は予測できません。
何かがある場合は、ローカル変数を共有する方法としてポインタが一般的に使用され、はグローバル変数を作成しません。代わりに、あなたはを望む関数へのポインタを渡すだけでと値を共有します。
これらは完全に別個の概念です。 1つはメモリの概念であり、もう1つはスコープの概念です。 – 4castle
@ 4castleあなたはそれを答えに変換し、それを精緻化する必要があります - 私はOPが両者の違いを理解していないかもしれないと思っています。 – templatetypedef
これは非常に良い答えです:http://stackoverflow.com/questions/1892198/whats-the-difference-between-pointers-and-global-variables-in-c –