C++引用和指针关系
C++ reference and pointer relationship
很抱歉出现noob问题,我只是对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&&
吗?这是一个右值引用,是移动语义的一个重要方面。
您可以拥有:
- 指向指针的指针:
int** i
- 对指针的引用:
int* &i
你不能有:
- 指向引用的指针
- 参考
第一件事是试图理解基本概念是什么。指针是保存另一个对象地址的变量。引用是另一个对象的别名,即为现有对象创建新名称。
这里最重要的是,在初始化引用之后,名称指的是真实对象,而不是引用。
考虑到这一点,
你能有一个指向指针的指针吗?
是的,指针是一个保存地址的变量。不同的指针可能包含第一个指针的地址。
你能提供一份参考资料吗?你能给我一个别名吗别名?
不,别名用另一个名字表示生活在其他地方的真实对象。可以创建引用同一对象的新别名,但不能创建别名的别名。
你能引用一个指针吗?也就是说,你能化名一个指针吗?
是的,您可以引用指针类型的变量。变量包含类型为pointer或int的对象这一事实无关紧要,它是一个变量,您可以创建一个别名。
你能创建一个指向引用的指针吗?也就是说,你能创建一个指向别名的指针吗?
不,别名只是一个变量的另一个名称,您可以有一个指向原始变量的指针,要获得它,您可以使用原始名称或别名,但不能有指向别名的指针。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 当依赖关系和依赖关系都是多态时,在哪个继承级别存储依赖关系指针?
- 指针和程序性能之间有什么关系吗?
- 如何解决指针数组中的数据依赖关系
- 指针 与局部变量的关系
- 回调和函数指针是什么关系
- 在特定情况下,指针删除和铸造之间的关系不清楚
- 使用关系运算符比较指针意味着什么
- 对齐方式与指针中尾随零的数量有何关系
- 如果存在任何循环关系,我应该假设弱指针使用吗?
- 为什么指针类型的内置关系运算符不生成C++的总顺序?
- 一旦使用,整个程序中的智能指针及其依赖关系
- 删除对特定类型的指针的依赖关系
- 智能指针的依赖关系注入是否违反单一责任原则
- 为什么有人告诉我数组是指针?C++中数组和指针之间的关系是什么
- C++引用和指针关系
- 在指向同一个类的两个不同指针之间建立对应关系
- 理解sizeof与指针的关系
- 双指针和二维数组之间的关系是什么?