我来自更多的Java背景,但是我遇到过这样的事情:
SDL_Surface *dot = NULL;
为什么我们把星号放在对象前面?
为什么不能这样做:
SDL_Surface dot = NULL;
两者有什么区别?
我知道这是一个指针,但究竟发生了什么?
答案 0 :(得分:2)
为什么我们把星号放在对象前面?
我们使用星号*
作为声明指针的类型的一部分。没有它,编译器就不会知道它是一个指针,它只会把它解释为一个常规对象。
int x; // an integer
int *x; // a pointer to an integer
Java有null
但C ++中的NULL
是一个扩展为0
的预处理器宏。当指针设置为0
时,通常意味着它们尚未使用值初始化。
int *x = NULL; // same as int *x = 0
两者有什么区别?
我认为this回答了这个问题。
答案 1 :(得分: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
有关该主题的进一步阅读,请参阅this。
答案 2 :(得分:0)
假设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