关于C++指针和参考,需要澄清
On C++ pointers and references, clarification needed
请问下面有什么错?
我的理解是,指针表示某种类型的地址。
所以,int i = 18
,指向它的指针是int *pI = &i;
以下 2 个声明有效
void foo (int &something) // Will accept an address of something
void bar (int *something) // Will accept a pointer to something
当我们将一个函数声明为
void bar (int *something)
我们最好发送一个指向某物的指针。事实上,foo(pI)
有效。
遵循相同的逻辑,在查看
void foo (int &something)
我们应该向它发送一个指向 int 作为参数的东西的地址,那么:
为什么foo(&i)
错了?
void foo (int &something) // Will accept an address of something
这是不正确的:int&
是一个引用,一个在某些方面类似于指针的概念,但根本不相同。
因为值可以通过引用更改,就像可以通过指针更改一样。但是,没有"空引用"这样的东西,而 NULL 指针很常见。
当你调用一个接受引用的函数时,你只需将你正在接受的引用传递给变量 - 不需要&
运算符:
void foo (something); // "something" must be a variable
void foo (int &something)
采用引用变量,而不是指针。
你调用它与调用void foo (int something)
完全相同,只是something
是通过引用传递的,而不是按值传递的。
void foo (int &something)//将接受某物的地址
不,虽然我能理解这种困惑。 该函数采用对int
的引用。 在定义良好的程序中,引用保证为非空。 它在概念上类似于指针,但在语义上不同。
要调用该函数,您无需执行任何特殊操作。
int i = 10;
foo(i); // passed to foo by reference
因为C++ 在函数原型的上下文中,&表示"引用类型",因为您在此处使用它。您的职能:
void foo (int &something)
实际上指定应传递整数引用类型,因此您只需像这样调用此函数:
foo(i);
请注意,在这种情况下,您仍然将 i 的地址传递到函数中,但您将其作为引用类型而不是原始指针执行。
&
有两种不同的含义。
第一种是从现有变量创建指针。
二是做一个参考。
尽管它们都使用相同的字符,但它们是两个完全不同的东西。
- C++错误消息*成员参考.**初学者*
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 参考资源文件VC++中的$(SolutionDir)
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 为什么在运算符重载时需要参考?
- 使 \page 和 \subpage 参考 doxygen 中的方法文档
- std::shared_ptr 自定义参考计数器
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 避免在基于反向范围的for循环实现中悬挂参考
- 通用参考 l 值不复制对象
- 标准::enable_if和通用参考的使用差异
- 标准::积累参考?
- C++丢失了参考
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- 矢量的通用参考
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- C++17 和静态临时生存期的参考扩展
- C++ 参考:这两个语句有什么区别?
- 如何理解 C++17 标准参考中的 [intro.object]/3? N4659 的
- 是否有必要使用 std::move?这不是已经是一个右值参考了吗?