-5

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

SDL_Surface *dot = NULL;

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

为什么不能这样做:

SDL_Surface dot = NULL;

两者有什么区别?

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

4

3 回答 3

2

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

我们使用星号*作为类型的一部分来声明一个指针。没有它,编译器就不会知道它是一个指针,它只会将它解释为一个常规对象。

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

两者有什么区别?

我认为回答了这个问题。

于 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 回答
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

于 2013-05-30T01:10:47.570 回答