我知道指针的基础知识。
我想知道你什么时候使用
Foo *foo;
而不是
Foo foo;
并且允许你做的是另一个没有。
提前致谢
答案 0 :(得分:7)
如果要引用堆变量(对象存活函数结束)和局部变量的非指针形式(生命周期以块/函数结束),通常使用指针。
作为成员变量,如果在不同的引用者之间共享Foo对象,则使用指针,如果与Foo具有整体关系,则使用嵌入对象。
答案 1 :(得分:2)
如果那是变量声明,Foo * foo;声明一个类型为pointer-to-Foo的变量。 Foo foo声明了一个Foo类型的变量。
有关更多信息,请参阅wikipedia关于指针的文章。
答案 2 :(得分:1)
阅读此问题的所选答案,非常直观:What are the barriers to understanding pointers and what can be done to overcome them?
答案 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 * createList
,Tree * createTree
...因为您确实创建了函数内部的数据结构因此存在于内存中,只需要返回它的地址