C++ 指针的不同类别是什么?
有谁能解释一下指针的不同类别(如野生指针)?以下是您的答案: 以下是您的答案:C++ 指针的不同类别是什么?,c++,c,C++,C,有谁能解释一下指针的不同类别(如野生指针)?以下是您的答案: 以下是您的答案: 有效的指针:指向内存中真实对象的指针 无效的指针:指向不应该是的内存的指针 NULL指针:其值为0的指针,因此不指向任何内容 悬空指针(有时也指野生指针):指向已删除/释放的内存的指针 Smart指针:实际上根本不是一个指针,而是一个像指针一样的对象,它为您管理内存 有效的指针:指向内存中真实对象的指针 无效的指针:指向不应该是的内存的指针 NULL指针:其值为0的指针,因此不指向任何内容 悬空指针(有时也指野生
- 有效的指针:指向内存中真实对象的指针
- 无效的指针:指向不应该是的内存的指针
- NULL指针:其值为0的指针,因此不指向任何内容
- 悬空指针(有时也指野生指针):指向已删除/释放的内存的指针
- Smart指针:实际上根本不是一个指针,而是一个像指针一样的对象,它为您管理内存
- 有效的指针:指向内存中真实对象的指针
- 无效的指针:指向不应该是的内存的指针
- NULL指针:其值为0的指针,因此不指向任何内容
- 悬空指针(有时也指野生指针):指向已删除/释放的内存的指针
- Smart指针:实际上根本不是一个指针,而是一个像指针一样的对象,它为您管理内存
- 指向变量的指针(
,int*
,也是char*
,这是一种特殊的伪类型,必须在取消引用之前强制转换。也指指向指针的指针。)void*
- 指向函数(
,void(*)(
)等)的指针int(*)(int)
- 指向变量的指针(
,int*
,也是char*
,这是一种特殊的伪类型,必须在取消引用之前强制转换。也指指向指针的指针。)void*
- 指向函数(
,void(*)(
)等)的指针int(*)(int)
这种区别很重要,因为一个家庭不能与另一个家庭融合,反之亦然。…史蒂夫的答案是正交的-
区别很重要,因为一个族不能转换成另一个族,反之亦然。还有函数指针,它指向代码而不是对象。以及指向成员的指针,这些成员需要类的实例才能完全取消引用。和指向成员函数的指针,成员函数指向代码,并要求和类的实例完全取消引用
还有几种不同类型的智能指针。它们用于封装动态内存分配,并跟踪底层数据的所有权。当不再有人拥有数据时,动态内存会自动释放。这里的三个大指针是作用域指针、共享指针和弱指针。作用域指针只有一个所有者,当它们超出作用域时会被删除[参见C++03中的
std::auto_ptr
和C++0x中的std::unique_ptr
)。共享指针可以有多个所有者,在所有所有者都使用完它们之前,内存不会被释放。弱点是其中的一种形式,但它们并非始终保持严格的所有权;它们在需要时请求所有权,如果相应的共享指针的所有者已用完,则该请求将被拒绝。还有指向代码而不是对象的函数指针。以及指向成员的指针,这些成员需要类的实例才能完全取消引用。和指向成员函数的指针,成员函数指向代码,并要求和类的实例完全取消引用
还有几种不同类型的智能指针。它们用于封装动态内存分配,并跟踪底层数据的所有权。当不再有人拥有数据时,动态内存会自动释放。这里的三个大指针是作用域指针、共享指针和弱指针。作用域指针只有一个所有者,当它们超出作用域时会被删除[参见C++03中的
std::auto_ptr
和C++0x中的std::unique_ptr
)。共享指针可以有多个所有者,在所有所有者都使用完它们之前,内存不会被释放。弱点是其中的一种形式,但它们并非始终保持严格的所有权;他们在需要时请求所有权,如果相应的共享指针的所有者已用完,则该请求将被拒绝。您还可以添加另一级别的分类,并根据指针的“常量”对其进行排序:
指向常量的指针-您可以更改为指针,但不能更改指针指向的内容
例如:
int i = 42;
const int* pi = &i;
int i = 42;
int* const pi = &i;
int i = 42;
const int* const pi = &i;
或
常量指针-无法更改指针指向的内容
例如:
int i = 42;
const int* pi = &i;
int i = 42;
int* const pi = &i;
int i = 42;
const int* const pi = &i;
指向常量的常量指针-您无法更改指针指向的内容,也无法更改指针本身
例如:
int i = 42;
const int* pi = &i;
int i = 42;
int* const pi = &i;
int i = 42;
const int* const pi = &i;
您还可以根据指针的“常量”添加另一级别的分类和排序指针: 指向常量的指针-您可以更改为指针,但不能更改指针指向的内容 例如:
int i = 42;
const int* pi = &i;
int i = 42;
int* const pi = &i;
int i = 42;
const int* const pi = &i;
或
常量指针-无法更改指针指向的内容
例如:
int i = 42;
const int* pi = &i;
int i = 42;
int* const pi = &i;
int i = 42;
const int* const pi = &i;
指向常量的常量指针-您无法更改指针指向的内容,也无法更改指针本身
例如:
int i = 42;
const int* pi = &i;
int i = 42;
int* const pi = &i;
int i = 42;
const int* const pi = &i;
你能澄清一下吗?什么类别?野生指针不是标准术语。野生指针是事实上的标准术语,表示指向某个随机位置的未初始化指针变量。对于其他类似的术语,请询问谷歌。从未听说过野生指针,我已经做了一段时间。我也是,但维基百科似乎喜欢它。你能澄清一下吗?什么类别?野生指针不是一个标准术语。野生指针是事实上的标准术语,意味着一个未初始化的指针变量指向一些