Foo * foo之间的区别;和Foo foo;在C ++中

时间:2009-08-10 21:26:23

标签: c++ pointers

我知道指针的基础知识。

我想知道你什么时候使用

Foo *foo; 

而不是

Foo foo;

并且允许你做的是另一个没有。

提前致谢

4 个答案:

答案 0 :(得分:7)

如果要引用堆变量(对象存活函数结束)和局部变量的非指针形式(生命周期以块/函数结束),通常使用指针。

作为成员变量,如果在不同的引用者之间共享Foo对象,则使用指针,如果与Foo具有整体关系,则使用嵌入对象。

答案 1 :(得分:2)

如果那是变量声明,Foo * foo;声明一个类型为pointer-to-Foo的变量。 Foo foo声明了一个Foo类型的变量。

有关更多信息,请参阅wikipedia关于指针的文章。

答案 2 :(得分:1)

答案 3 :(得分:0)

在许多情况下你使用Foo * foo

1 - 如果返回的值是Foo类型的数组

2 - 如果函数操作某些数据结构(特别是如果你正在使用函数范例,其中函数的唯一结果是它的返回值) 例如:

List * deleteListNode(int nbr, List * src) {
     Node * tmp = getElementPointer(nbr, src);
     tmp->prev->next = tmp->next;
     tmp->next->prev = tmp->prev;
     return src;
}

此函数将列表中的元素编号和列表作为参数,并在删除所需元素后返回指向同一列表标记的指针作为参数,因此该函数仅操作指针,如您所知32位值(或64位系统上的64位)。

3 - 如果返回对象的创建是资源消耗,那么您将返回指向现有对象的指针,尤其是在创建函数ex:List * createListTree * createTree ...因为您确实创建了函数内部的数据结构因此存在于内存中,只需要返回它的地址

即可