任何机构都可以解释不同类别的指针(如野指针)吗?
答案 0 :(得分:9)
答案 1 :(得分:6)
还有函数指针,它指向代码而不是对象。指向成员的指针,需要一个类的实例才能完全取消引用。指向成员函数的指针,指向代码和需要以及类的实例以完全取消引用。
还有几种不同类型的智能指针。这些用于包装动态内存分配,并跟踪底层数据的所有权。当没有人拥有数据时,动态内存会自动释放。这里的三个巨头是范围指针,共享指针和弱指针。范围指针只有一个所有者,当它们超出范围时,它们会被删除[参见C ++ 03中的std::auto_ptr
和C ++ 0x中的std::unique_ptr
]。共享指针可以拥有许多所有者,并且在所有所有者完成后,内存不会被释放。弱指针是这些的一种形式,但它们并不总是保持严格的所有权;他们在需要时请求所有权,如果相应的共享指针已用完所有者,则该请求被拒绝。
答案 2 :(得分:5)
......正确地添加史蒂夫的回答 -
int*
,char*
,还有 void*
的指针,这是一种特殊的伪类型,在解除引用之前必须始终强制转换。指针。)void(*)()
,int(*)(int)
)等等。)区别很重要,因为一个家庭不能投入另一个家庭,反之亦然。
答案 3 :(得分:2)
您还可以根据“constness”添加另一级别的分类和排序指针:
指向const 的指针 - 您可以更改为指针,但不能指向它指向的位置。
示例:
int i = 42;
const int* pi = &i;
或
int i = 42;
int const* pi = &i;
常量指针 - 您无法更改指针指向的内容。
示例:
int i = 42;
int* const pi = &i;
Const指向const的指针 - 您无法更改指针指向的内容,也无法更改指针本身。
示例:
int i = 42;
const int* const pi = &i;
答案 4 :(得分:1)
这是你的答案: