C++ C++;参考电话

C++ C++;参考电话,c++,function,pass-by-reference,pass-by-value,pass-by-pointer,C++,Function,Pass By Reference,Pass By Value,Pass By Pointer,如果我有一个函数,它接受一个指向整数的指针,并且我从main中传递一个对整数变量的引用,那么这个函数是按值调用还是按引用调用?示例代码: #include <iostream> using namespace std; void fun(int *a){ //Code block } int main(){ int a = 5; fun(&a); return 0; } #包括 使用名称空间std; 虚无乐趣(int*a){ //代码块 } i

如果我有一个函数,它接受一个指向整数的指针,并且我从main中传递一个对整数变量的引用,那么这个函数是按值调用还是按引用调用?示例代码:

#include <iostream>

using namespace std;

void fun(int *a){
//Code block
}

int main(){
    int a = 5;
    fun(&a);
    return 0;
}
#包括
使用名称空间std;
虚无乐趣(int*a){
//代码块
}
int main(){
INTA=5;
乐趣(&a);
返回0;
}

在上面的代码中,对函数fun的调用是按值调用还是按引用调用?

您正在按值传递a所在的地址

因此,当你在名为“乐趣”的空白中键入*a时,你正在访问a的值

但正如我所说的,您正在通过值传递指向a的int指针。

您正在通过值传递指向a的指针。


根据您所说的抽象级别,您可以说因此通过指针传递
a
,或者通过“句柄”传递
a
。更广义地说,“通过引用传递<代码> A/COD>”不会严格错误,但C++中是错误的,因为“引用”是指C++中的特定内容。在这个代码中没有C++引用。

您的调用是按值传递,但类型<代码> int *>代码>不是参数类型<代码> int <代码>。这意味着创建指针的副本并将其传递给函数。您可以更改它指向的对象的值,但不能更改指针的值

如果你的函数是这样的

void fun(int *a)
{
   *a = 10;
}
int main() {
    int b = 1;
    fun(&b);
    // now b = 10;
    return 0;
}
您从
main
这样调用

void fun(int *a)
{
   *a = 10;
}
int main() {
    int b = 1;
    fun(&b);
    // now b = 10;
    return 0;
}
您可以通过向函数传递指向
b
的指针来修改该值

如果您执行以下操作,也会产生相同的效果,即通过引用传递

void fun2(int& a) 
{
    a = 5;
}

int main()
{
    int b = 10;
    fun2(b); 

    // now b = 5;
    return 0;
}

现在考虑一个第三个函数,它采用值

来取整数参数。
void fun3(int a)
{
    a = 10;
}

int main()
{
    int b = 1;
    fun3(b);
    // b  is still 1 now!
    return 0;   
}
使用传递值,
fun3
更改传递给它的参数的副本,而不是main范围内的变量
b


传递(非常量)引用或指针允许修改传递给它的参数。按值或常量引用传递将不允许更改传递给它的参数。

可能的重复项如果不向函数传递引用,则传递
a
的地址。
It is call by reference as you are passing reference the address reference to your variable so, 
inside function
           *a = 100;
changes the value of a in caller function as the content at that address has been changed.
But address is passed by value so
             a = NULL;
will not change a, as a still be pointing to same address.