En C ++, un parámetro de referencia como una función

En C ++, un parámetro de referencia como una función

Se citó como argumento

La razón por el aumento en C ++ tipo de referencia, es principalmente una función como un parámetro con el fin de ampliar los datos de la función de transferencia de carga de la función.

--------------------

C ++, transferencia de parámetros de la función:
(1) el nombre de la variable como argumentos y parámetros. En este caso el valor se pasa a la transmisión variable de parámetro es unidireccional. Si durante la ejecución de la función de los cambios en el valor de los parámetros, no vuelve a la discusión. Porque cuando se llama a la función, parámetros y argumentos no son la misma celda de memoria. // c con


(2) hacer pasar una variable de puntero. El parámetro es una variable de puntero, el argumento es la dirección de una variable, llamada a la función, los parámetros (variable puntero) a la unidad de punto variable de argumento. Este valor puede ser cambiado por el puntero argumento de parámetro. // c con


(3) C ++ proporciona una transmisión variable de referencia. El parámetro es una variable de referencia, y el argumento es una variable, la función se llama, los parámetros (variable de referencia) a punto variable de argumento unidad. Este argumento puede ser cambiado por el valor de referencia del parámetro.

 

#include <iostream>
using namespace std;
void funcr(int &num , int x)
{
    cout<<"in funcr,addr is:"<<&num<<endl;//对比地址,等于原地址
    num = x ;//会改变传入参数的值。 
}

void func(int num , int x)//不能写成void funcr(int num , int x),不正确的重载,导致不知道该调用谁。
{
    cout<<"in func,addr is:"<<&num<<endl;//对比地址,有所变化
    num = x ;//只会在函数内改变拷贝变量的值,不会改变传入的参数值
} 

int main() {
    int x = 100;
    int &rx = x ;
    cout<<"addr_x:"<<&x<<endl;
    cout<<"addr_rx:"<<&rx<<endl;//变量地址和它的引用地址相同


    funcr(x,177);//改变传入参数的值,不管代码中传的是变量本身还是引用   
    cout<<"after funcr , x="<<x<<endl;

    funcr(rx,211);  //改变传入参数的值          
    cout<<"after funcr , rx="<<x<<endl;

    func (rx,233); //不会改变传入参数的值,不管代码中传的是变量本身还是引用                 
    cout<<"after func , rx="<<x<<endl;

    while(1);
    return 0 ;
} 
结果:
addr_x:0xbf82293c
addr_rx:0xbf82293c
in funcr,addr is:0xbf82293c
after funcr , x=177
in funcr,addr is:0xbf82293c
after funcr , rx=211
in func,addr is:0xbf822920
after func , rx=211

 

se hace pasar a 1. El valor: una copia de los datos de parámetros a la que la función pertenece proceso de pila, si el objeto es un valor objeto de la clase se pasa una gran estructura u objeto llevará algún tiempo y el espacio.

2. pasando un puntero: parámetro también tiene una copia de los datos a los que la función pertenece proceso de pila, pero una copia de los datos se fija como la dirección de 4 bytes.

3. transmisión Referencing: Los mismos datos se ha descrito anteriormente copiar proceso, pero es para la dirección que corresponde a una dirección de alias de los residen los datos.

En términos de eficiencia, el puntero pasa por referencia, y la alta relación de transmisión de la eficiencia de transmisión. La idea general de usar una referencia en la transmisión sea más compacta, la lógica de código claro.

Hacer los parámetros de función pasados ​​por referencia "es un C ++ características, lenguaje C no soporta.

Por ejemplo: la estructura de datos y con y sin y

Con y parámetro es un tipo de referencia, se pasa la dirección, de hecho, participando con el parámetro de cambio se cambia; sin y parámetro es un valor de parámetro en general se transfiere, de hecho, no cambia como el parámetro de referencia se cambia . Por lo tanto, los cambios estructurales y la necesidad de volver este cambio de los parámetros de uso de referencia, o con los parámetros generales. GetElem (L, i) es simplemente para i-ésimo valor de elemento, la estructura de forma lineal no es ningún cambio, por lo que no añadir L & parámetros anteriores. ListInsert (& L, i, e) se insertan en la lista lineal L de i-ésimo valor de elemento del elemento E de un configuración de la lista L lineal ha cambiado, que aumenta la longitud, por lo que hay que añadir antes de L &. Si no, la pantalla L, que no muestra elementos adicionales, L es la longitud de la pantalla, es todavía aumenta desde el valor previo, 1 menor que la longitud real.

 

 

 

Publicado 18 artículos originales · ganado elogios 86 · vistas 160 000 +

Supongo que te gusta

Origin blog.csdn.net/u013178472/article/details/104969327
Recomendado
Clasificación