C++ Foo*Foo之间的差异;和富富,;在C++;

C++ Foo*Foo之间的差异;和富富,;在C++;,c++,pointers,C++,Pointers,我知道指针的基本知识 我只是想知道你什么时候用 Foo *foo; 而不是 Foo foo; 一个允许你做而另一个不允许 提前感谢如果您想引用堆变量(对象在函数结束时生存),通常会使用指针,而局部变量的非指针形式(生命周期以块/函数结束) 作为成员变量,如果您在不同的引用器之间共享Foo对象,则使用指针;如果您与Foo有完整的部分关系,则使用嵌入对象。如果是变量声明,则使用Foo*Foo;声明指向Foo的指针类型的变量。Foo-Foo声明类型为Foo的变量 有关更多信息,请参阅的关于指针的

我知道指针的基本知识

我只是想知道你什么时候用

Foo *foo; 
而不是

Foo foo;
一个允许你做而另一个不允许


提前感谢

如果您想引用堆变量(对象在函数结束时生存),通常会使用指针,而局部变量的非指针形式(生命周期以块/函数结束)


作为成员变量,如果您在不同的引用器之间共享Foo对象,则使用指针;如果您与Foo有完整的部分关系,则使用嵌入对象。

如果是变量声明,则使用Foo*Foo;声明指向Foo的指针类型的变量。Foo-Foo声明类型为Foo的变量


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

阅读此问题的选择答案,非常直观:

您在许多情况下使用
Foo*Foo

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

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

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

3-如果返回对象的创建占用资源,那么您将返回指向现有对象的指针,尤其是在创建函数中,例如:
List*createList
Tree*createTree
。。。因为您确实在函数内部创建了数据结构,所以它存在于内存中,所以您只需返回它的地址

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