什么是不同类别的指针?

时间:2010-05-27 07:15:22

标签: c++ c

任何机构都可以解释不同类别的指针(如野指针)吗?

5 个答案:

答案 0 :(得分:9)

  • 有效指针:一个指向内存中的真实对象
  • 无效的指针:指向内存不符合预期的指针。
  • NULL 指针:一个指针,其值为0,因此指向任何位置。
  • 悬空指针(有时也是狂野指针):指向已删除/释放的内存。
  • 智能指针:根本不是指针,而是一个像指针一样的对象,但为你管理内存。

答案 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)

这是你的答案:

C++ Pointers