抱歉这个菜鸟问题,我对 C++ 中指针和引用之间的关系有点困惑。
以下哪项操作在 C++ 中是合法的?
- 指针指向指针;
- 指向引用的指针;
- 引用指针;
- 参考参考;
我知道指针的指针是完全合法的,即:
int* p;
*p = 5;
int ** pp;
*pp = p;
(我不知道我是否做对了。)
有人可以用一些重要的例子为我澄清这些吗?谢谢你。
抱歉这个菜鸟问题,我对 C++ 中指针和引用之间的关系有点困惑。
以下哪项操作在 C++ 中是合法的?
我知道指针的指针是完全合法的,即:
int* p;
*p = 5;
int ** pp;
*pp = p;
(我不知道我是否做对了。)
有人可以用一些重要的例子为我澄清这些吗?谢谢你。
C++中指针和引用的关系
没有任何。没有关系。他们完全不同。
以下哪项操作在 C++ 中是合法的?
指向指针的指针和对指针的引用。指向引用的指针和对引用的引用不存在。
(我不知道我是否做对了。)
您不是:您发布的代码段调用了未定义的行为(原样),因为您正在取消引用未初始化的指针。
指针指向:
您展示指针到指针的示例在语义上是正确的,除了您没有为p
.
参考指针:
哪有这回事。
引用指针:
对指针的引用与对非指针的引用的行为方式相同。它们允许一个对象通过另一个对象的别名。例如:
int *p = new int;
int *& ref = p;
ref = new int(5);
std::cout << *p; // 5
它们还有助于将指针作为可变参数传递。在 C 中,如果要更改指针的地址,则将其发送给函数:
void f(int **ptr)
{
*ptr = new int(10);
}
int *p;
f(&p);
在 C++ 中,我们可以简单地使用对指针的引用,所以这不是明确需要的:
void f(int *&ptr)
{
ptr = new int(10);
}
int *p;
f(p);
参考参考:
哪有这回事。你在想T&&
吗?这是一个右值引用,是move-semantics的一个重要方面。
首先是试图理解基本概念是什么。指针是保存另一个对象地址的变量。引用是另一个对象的别名,即为现有对象创建一个新名称。
这里最重要的是,在引用初始化之后,名称指的是真实对象而不是引用。
考虑到这一点,
你能有一个指向指针的指针吗?
是的,指针是一个保存地址的变量。不同的指针可能保存第一个指针的地址。
你可以参考参考吗?即你可以有一个别名的别名吗?
不,别名代表以另一个名称存在于其他地方的真实对象。您可以创建引用同一对象的新别名,但不能创建别名的别名。
你可以参考一个指针吗?即你可以给指针起别名吗?
是的,您可以引用指针类型的变量。变量包含指针类型或 int 类型的对象这一事实无关紧要,它是一个变量,您可以创建一个别名。
你能创建一个指向引用的指针吗?即你能创建一个指向别名的指针吗?
不,别名只是一个变量的另一个名称,您可以拥有指向原始变量的指针,并且要获得它,您可以使用原始名称或别名,但不能拥有指向别名的指针。
你可以有:
int** i
int* &i
你不能有: