我来自更多的 Java 背景,但是我遇到过这样的事情:
SDL_Surface *dot = NULL;
为什么我们把星号放在对象前面?
为什么不能这样做:
SDL_Surface dot = NULL;
两者有什么区别?
我知道这是一个指针,但究竟发生了什么?
我来自更多的 Java 背景,但是我遇到过这样的事情:
SDL_Surface *dot = NULL;
为什么我们把星号放在对象前面?
为什么不能这样做:
SDL_Surface dot = NULL;
两者有什么区别?
我知道这是一个指针,但究竟发生了什么?
为什么我们将星号放在对象前面?
我们使用星号*
作为类型的一部分来声明一个指针。没有它,编译器就不会知道它是一个指针,它只会将它解释为一个常规对象。
int x; // an integer
int *x; // a pointer to an integer
Java 有null
,但NULL
在 C++ 中是一个扩展为0
. 当指针设置为0
它时,通常意味着它们没有被初始化。
int *x = NULL; // same as int *x = 0
两者有什么区别?
我认为这回答了这个问题。
基本上,指针是对地址的引用。如果你有类似的东西:
int temp = 1;
int *p; // or int* p or int * p
p = &temp;
您没有将 temp 的值分配给 p,但您正在引用堆栈中的地址。区别很明显:它在哪里,而不是多少。
相反,您可以这样做:
int temp2 = 0;
temp2 = *p; //temp2 is now 1
有关该主题的进一步阅读,请参阅此。
假设SDL_Surface
是一个类...
SDL_Surface *dot = NULL;
这意味着dot
是一个指向对象的指针,SDL_Surface
它被初始化为 NULL。表示它没有指向任何对象。指针是保存另一个变量地址的变量。为了dot
指向一个SDL_Surface
对象,您必须分配对象并将地址分配给dot
. 在 C++ 中,您可以使用运算符来执行此new
操作。
SDL_Surface *dot = new SDL_Surface
这将在堆中创建对象。所以你必须使用操作delete
符手动释放它
delete dot