相关疑难解决方法(0)

在C和C++中通过引用传递的含义?

我对C和C++中"通过引用传递"的含义感到困惑.

在C中,没有参考.所以我猜通过引用传递意味着传递一个指针.但那么为什么不通过指针调用它呢?

在C++中,我们有指针和引用(以及接近的迭代器之类的东西).那么通过引用传递的是什么意思呢?

c c++ pass-by-reference

8
推荐指数
2
解决办法
6614
查看次数

7
推荐指数
3
解决办法
2万
查看次数

"&"在C++中意味着什么?

"&"在C++中意味着什么?在功能范围内

void Read_wav::read_wav(const string &filename)
{

}
Run Code Online (Sandbox Code Playgroud)

它在C中的含义是什么?

谢谢


编辑1

如果我想将上面的C++函数转换为C函数,我该怎么做?

c c++

7
推荐指数
2
解决办法
2万
查看次数

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++ performance coding-style parameter-passing

7
推荐指数
1
解决办法
3736
查看次数

传递参考和*之间的区别?

传递引用和使用C指针表示法有什么区别?

void some_function(some_type& param)

和

void some_function(some_type *param)

谢谢

c++

6
推荐指数
2
解决办法
1125
查看次数

参考 - const指针

我在很多地方读过有关参考文献的内容:

引用就像一个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)

那么"引用无法重新定位"是什么意思?

c++ reference

6
推荐指数
3
解决办法
1526
查看次数

这是const_cast的未定义行为吗?

这里发生了什么?

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++ const-cast

6
推荐指数
2
解决办法
1345
查看次数

foo()= 42; < - 怎么可能呢?

可能重复:
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();这里的意思是什么?

c++

5
推荐指数
2
解决办法
685
查看次数

与C++中的Null相比

好的,请仔细检查下面的代码,它只是函数的一部分

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

c++ null operators

5
推荐指数
1
解决办法
9192
查看次数

C++ 函数参数中的指针与引用

我想知道如何让函数改变两个变量(返回和另一个变量),我偶然发现在参数(我理解是指参数的地址)之前用“&”调用函数,然后在整个函数中,用'*'符号引用它(我猜这是一个“取消引用”,意味着它改变了地址处的对象)。

不管怎样,这一切都很好,然后有朋友说你可以直接用变量调用函数,在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++ pointers

5
推荐指数
1
解决办法
5062
查看次数