相关疑难解决方法(0)

传递参考与传递值之间有什么区别?

有什么区别

  1. 通过引用传递的参数
  2. 一个由值传递的参数?

你能给我一些例子吗?

language-agnostic pass-by-reference pass-by-value

539
推荐指数
11
解决办法
65万
查看次数

在C和C++中,"通过引用传递"到底有什么区别?

C和C++开发人员使用短语"通过引用传递",但它们似乎用于表示不同的东西.每种语言中这个模棱两可的短语究竟有什么区别?

c c++ terminology pass-by-reference pass-by-value

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

在C中通过引用传递数组

我是C的新手,我有一个疑问.

由于C函数创建了它的参数的本地副本,我想知道为什么以下代码按预期工作:

void function(int array[]){

    array[0] = 4;
    array[1] = 5;
    array[2] = 6;   
}

int main(){

    int array[] = {1,2,3};

    function(array);

    printf("%d %d %d",array[0],array[1],array[2]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

线路输出为4 5 6.

为什么这样做有效而以下情况不然?

void function(int integer){

    integer = 2;
}

int main(){

    int integer = 1;

    function(integer);

    printf("%d",integer);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出仅为1.

简短版本:为什么函数可以修改父变量的值,如果它们作为数组传递?

谢谢你们!

c arrays reference function

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

"const T&arg"与"T arg"

以下哪个示例是声明以下功能的更好方法?为什么?

void myFunction (const int &myArgument);
Run Code Online (Sandbox Code Playgroud)

要么

void myFunction (int myArgument);
Run Code Online (Sandbox Code Playgroud)

c++

17
推荐指数
5
解决办法
5950
查看次数

当我更改函数内部的参数时,它也会为调用者更改吗?

我在下面写了一个函数:

void trans(double x,double y,double theta,double m,double n)
{
    m=cos(theta)*x+sin(theta)*y;
    n=-sin(theta)*x+cos(theta)*y;
}
Run Code Online (Sandbox Code Playgroud)

如果我在同一个文件中调用它们

trans(center_x,center_y,angle,xc,yc);
Run Code Online (Sandbox Code Playgroud)

会的价值xcyc改变?如果没有,我该怎么办?

c++

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

当我写Func1(int&a)和Func1(int*a)时有什么区别

可能重复:
C++中指针变量和引用变量之间的差异

当我开始使用C++时,我发现下面的操作令人困惑.我知道通过引用传递和传递值.但是最近我遇到了这样的功能让我很困惑:

Func1(int &a) 
Func2(int *a)
Run Code Online (Sandbox Code Playgroud)

这两个函数都期望a的地址,但是当我调用Func1时,我会这样做,Func1(a)而在Func2的情况下,我调用了Func2(&a)

为什么Func1在期望a的地址时直接接受int a

c++ windows parameter-passing pass-by-reference

12
推荐指数
3
解决办法
1万
查看次数

'const&'在C++中意味着什么?

为此道歉,我是一名学生正在努力学习C++,我只是觉得如果我问这个问题并且对此有很多正确的看法会更好,所以我很抱歉提出愚蠢的问题.我只是觉得问题比不知道更好.

我分别理解地址运算符&const关键字的含义.但是,当我在阅读某个地方的示例代码时,我看到const&使用了,只是想要暗示的是什么?

它用于代替函数原型中的参数,例如:

void function (type_Name const&);
Run Code Online (Sandbox Code Playgroud)

如果只使用其中一个我会理解,但我在这里有点困惑所以一些专业的见解会很棒.

c++ const operators

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

为什么我不能使用static_cast <int&>将整数引用参数传递给C++中的函数?

我在C++程序中有一个枚举参数,我需要使用一个通过参数返回值的函数来获取该参数.我首先将其声明为int,但在代码审查时要求将其键入为枚举(ControlSource).我做了这个,但它打破了Get()函数 - 我注意到一个C样式转换为int并解决了问题,但是当我第一次尝试使用static_cast <>修复它时,它没有编译.

为什么会这样,为什么当eTimeSource是一个int时,根本不需要转换来通过引用传递整数?

//GetCuePropertyValue signature is (int cueId, int propertyId, int& value);

ControlSource eTimeSource = ControlSource::NoSource;

pPlayback->GetCuePropertyValue(programmerIds.cueId, DEF_PLAYBACKCUEPROPERTY_DELAY_SOURCE, static_cast<int&>(eTimeSource)); //This doesn't work.

pPlayback->GetCuePropertyValue(programmerIds.cueId, DEF_PLAYBACKCUEPROPERTY_DELAY_SOURCE, (int&)(eTimeSource)); //This does work.

int nTimeSource = 0;
pPlayback->GetCuePropertyValue(blah, blah, nTimeSource); //Works, but no (int&) needed... why?
Run Code Online (Sandbox Code Playgroud)

c++ pass-by-reference static-cast

9
推荐指数
1
解决办法
5500
查看次数

传递的价值,结果呢?

可能重复:
通过引用传递或通过值传递?
在C++中通过引用/值传递

我遇到了pass-by-value-result方法的问题.我理解通过引用传递和传递值,但我不太清楚传值值的结果.通过值有多相似(假设它是相似的)?

这是代码

#include <iostream>
#include <string.h>
using namespace std;

void swap(int a, int b)
{

  int temp;
    temp = a;
    a = b;
    b = temp;
}

int main()
{
  int value = 2;
  int  list[5] = {1, 3, 5, 7, 9};


  swap(value, list[0]);

  cout << value << "   " << list[0] << endl;

  swap(list[0], list[1]);

  cout << list[0] << "   " << list[1] << endl;

  swap(value, list[value]);

  cout << value << "   " << list[value] << …
Run Code Online (Sandbox Code Playgroud)

c++

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

将变量传递给函数时,为什么函数只获得变量的副本?

将变量传递给函数时,为什么函数只获取变量的副本/副本?

int n=1;

void foo(int i)
{
    i++;
}
Run Code Online (Sandbox Code Playgroud)

众所周知,函数foo()不能通过n使用foo(n)来改变它的值.

当然我们可以传递变量的地址来对参数变量进行一些更改.
但是你不觉得这有点不方便吗?

为什么c/c ++只是为了给函数提供重复而不是直接将"真实"变量本身赋给函数?
这种范式的优点/好处是什么?


更新:
我已经阅读了@ paxdiablo的回答.我认为他的"封装,模块化和效果本地化"的解释是好的.
但在我的方式,它也可以保留参数参数的值.它还可以实现封装.通过这种方式:(假设函数可以直接获取"真实"变量而不是默认的重复)

void foo(int n)
{
    int temp=n;
    //Do something to temp...

}
Run Code Online (Sandbox Code Playgroud)

在我的方式中,当你想要改变传入的参数值时,可以消除复杂的机制,例如"通过引用传递"或指针.这就是好处.

经过一段时间的思考.我意识到为什么c/c ++没有像我提出的那样设计的原因只是因为我的方式的不合理!
按照我的方式,如果一个函数有很长的变量列表,那就太可怕了.我想要的是更方便的方式实际上不方便:
你必须这样写:

void foo(int a,int b,double c,float d,char s...)
{
    int temp1=a;
    int temp2=b;
    double temp3=c;
    float temp4=d;
    char temp5=s;
    ...
    //Do something to temp{1,2,3,4,5....}

}
Run Code Online (Sandbox Code Playgroud)

因此,c/c ++的设计者引入了复杂的机制来方便地进行权衡.
我对吗?

c c++

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