我对C和C++中"通过引用传递"的含义感到困惑.
在C中,没有参考.所以我猜通过引用传递意味着传递一个指针.但那么为什么不通过指针调用它呢?
在C++中,我们有指针和引用(以及接近的迭代器之类的东西).那么通过引用传递的是什么意思呢?
可能重复:
C++中指针变量和引用变量之间有什么区别?
C++中的Class和mean是什么?它与Class*有什么不同?
Class& foo;
Class* foo;
Run Code Online (Sandbox Code Playgroud) "&"在C++中意味着什么?在功能范围内
void Read_wav::read_wav(const string &filename)
{
}
Run Code Online (Sandbox Code Playgroud)
它在C中的含义是什么?
谢谢
编辑1
如果我想将上面的C++函数转换为C函数,我该怎么做?
我今天正在编写一个C++类,我编写了一个函数,它将参数作为参考而不是指针,这是我很少做的事情.我总是通过指针传递.所以我准备改回来,然后我意识到 - 我不知道我是否应该,或者它是否重要.
所以我转向你们.我有三种传递参数的方法:
//1: By pointer
Object* foo(Object* bar) {...}
//2: By reference
Object& foo(Object& bar) {...}
//3: By value (just for completeness)
Object foo(Object bar) {...}
Run Code Online (Sandbox Code Playgroud)
假设#3出于性能原因(是的,我知道编译器已经相当好,但仍然如此),其他两个或多或少相当.
那么:什么是"最好的"方法?指针?参考文献?两者的某种组合?或者甚至重要吗?技术原因是最好的,但风格的原因同样好.
更新: 我接受了YeenFei的答案,因为它处理了为我提供的差异(即使我然后明确地忽略了他的建议 - 我喜欢将NULL作为选项......).但每个人都提出了很好的观点 - 特别是GMan(在评论中)和Nemo,在回答性能和价值传递的过程中.如果您在这里寻求答案,请检查所有答案!
传递引用和使用C指针表示法有什么区别?
void some_function(some_type& param)
和
void some_function(some_type *param)
谢谢
我在很多地方读过有关参考文献的内容:
引用就像一个const指针
引用总是指对象
初始化后,无法重新设置参考
我想在最后一点说清楚.那是什么意思?
我试过这段代码:
#include <iostream>
int main()
{
int x = 5;
int y = 8;
int &rx = x;
std::cout<<rx<<"\n";
rx = y; //Changing the reference rx to become alias of y
std::cout<<rx<<"\n";
}
Run Code Online (Sandbox Code Playgroud)
产量
5
8
Run Code Online (Sandbox Code Playgroud)
那么"引用无法重新定位"是什么意思?
这里发生了什么?
const int a = 0;
const int *pa = &a;
int *p = const_cast<int*>(pa);
*p = 1; // undefined behavior ??
cout << a << *p; // ??
Run Code Online (Sandbox Code Playgroud)
我的编译器输出0和1,但'a'的地址和'p'的值是相同的,所以我很困惑这是怎么回事.
可能重复:
C++中指针变量和引用变量之间有什么区别?
我正在阅读一篇关于右值的文章,以便理解新C++标准的通用引用,并发现以下作为左值的示例
// lvalues:
//
int i = 42;
i = 43; // ok, i is an lvalue
int* p = &i; // ok, i is an lvalue
int& foo();
foo() = 42; // ok, foo() is an lvalue
int* p1 = &foo(); // ok, foo() is an lvalue
Run Code Online (Sandbox Code Playgroud)
int& foo();这里的意思是什么?
好的,请仔细检查下面的代码,它只是函数的一部分
void RepeatWord(){
system("cls");
string word = NULL;
string newword = NULL;
int repeats = 0;
while(true){
if(word == NULL){
cout<<"Currently no word is stored..";
cout<<"\n\nPlease enter a word: ";
cin>>word;
}
....
Run Code Online (Sandbox Code Playgroud)
好吧,我一直在使用其他编程语言,我总是与一个NULL值进行比较,但在C++ ...它似乎是一个不同的情况.错误说..
错误:'word == 0'中的'operator =='不匹配
好吧,我想知道我只是比较一个NULL,我真的不知道为什么这是错的.比较一个值与一个NULLC++是不同的?请教我.谢谢
注意:我比java知道更多ruby
我想知道如何让函数改变两个变量(返回和另一个变量),我偶然发现在参数(我理解是指参数的地址)之前用“&”调用函数,然后在整个函数中,用'*'符号引用它(我猜这是一个“取消引用”,意味着它改变了地址处的对象)。
不管怎样,这一切都很好,然后有朋友说你可以直接用变量调用函数,在header中用&前面的变量引用变量,并在整个函数中正常对待它。这似乎更容易,那么为什么网络上没有更多关于它的信息呢?一种风格比另一种更正确吗?
void foo(int &junk) //The way the friend said
{
junk++;
}
void oof(int *junk) //what I found, and what the internet seems full of
{
(*junk)++;
}
int main ()
{
int junk=1;
std::cout << junk << "\n";
foo(junk);
std::cout << junk << "\n";
oof(&junk);
std::cout << junk;
}
Run Code Online (Sandbox Code Playgroud)
这输出:
1
2
3
Run Code Online (Sandbox Code Playgroud)
所以一切正常,我想。
c++ ×10
c ×2
pointers ×2
reference ×2
coding-style ×1
const-cast ×1
null ×1
operators ×1
performance ×1