为什么我们制作指针对象?

时间:2013-05-30 00:31:18

标签: c++

我来自更多的Java背景,但是我遇到过这样的事情:

SDL_Surface *dot = NULL;

为什么我们把星号放在对象前面?

为什么不能这样做:

SDL_Surface dot = NULL;

两者有什么区别?

我知道这是一个指针,但究竟发生了什么?

3 个答案:

答案 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