-5

私は Java のバックグラウンドを持っていますが、次のようなことに遭遇しました。

SDL_Surface *dot = NULL;

オブジェクトの前にアスタリスクを付けるのはなぜですか?

これができない理由:

SDL_Surface dot = NULL;

2つの違いは何ですか?

私はそれがポインターであることを知っていますが、正確にはどうなりますか?

4

3 に答える 3

2

オブジェクトの前にアスタリスクを付けるのはなぜですか?

型の一部としてアスタリスクを使用して*、ポインターを宣言します。これがないと、コンパイラはそれがポインターであることを認識せず、通常のオブジェクトとして解釈するだけです。

int x;  // an integer
int *x; // a pointer to an integer

Java にはありますnullNULL、C++ では に展開されるプリプロセッサ マクロです0。ポインターが0それに設定されている場合、通常、値で初期化されていないことを意味します。

int *x = NULL; // same as int *x = 0

2つの違いは何ですか?

これはその質問に答えると思います。

于 2013-05-30T00:35:37.030 に答える
1

基本的に、ポインターはアドレスへの参照です。次のようなものがある場合:

int temp = 1;
int *p; // or int* p or int * p
p = &temp;

temp の値を p に割り当てていませんが、スタック内のアドレスを参照しています。違いは明らかです。ではなく、場所です。

逆に、これを行うことができます:

int temp2 = 0;
temp2 = *p; //temp2 is now 1

このトピックの詳細については、このを参照してください。

于 2013-05-30T00:35:07.797 に答える