传值传参和引用传参

来源:互联网 发布:软件板块拓尔思 编辑:程序博客网 时间:2024/04/29 17:49
引用方式传参,引用相当于是外部变量的别名,实际操作的就是该变量,即在函数内对该变量进行修改的话,在外部该变量也会相应被修改。而传值方式传参,实际上是复制了一个外部变量的副本进入函数中,在函数内操作的为该副本,对该变量的修改并不会实际修改函数外的该变量。注意,此处未考虑传入的参数为指针的情况,如果传值方式传入的是指针,那么如果单纯修改指针,那么在跳出函数后,该指针指向不受影响,但是如果修改的是指针指向的值,那么外部指针所指向的内容也是相应修改了的。因为以指针为参数进行传值,也是在函数内部复制了一个指针的副本,因而在内部修改指针本身即修改其副本并不影响外部的指针,但是两个指针都是指向同一个内存空间的,因而如果在函数内部修改了指针指向的内容,外部指针指向的内容也就相应改变了。
#include <iostream>using namespace std;//测试如果引用进入函数后进行修改,跳出函数后变量是否修改;void ChangeRef(int& ref);//测试以传值方式进入函数进行修改,跳出函数后变量是否修改void ChangeNotRef(int ref);//测试以指针为参数传入函数,修改指针指向,是否影响外部指针指向void ChangePtr(int* ptr);//测试在函数中修改指针指向的内容,是否影响外部指针指向内容void ChangePtrVal(int* ptr);int main(int argc, char* argv){    int Ref = 0;    cout << "传入引用之前的值为:" << Ref << endl;    ChangeRef(Ref);    cout << "在函数内修改引用后,跳出函数的值为:" << Ref << endl;    ChangeNotRef(Ref);    cout << "通过传值方式在函数内修改后,跳出函数的值为:" << Ref << endl;    int* ptr = &Ref;    cout << "传入函数前的指针指向:" << ptr << endl;    ChangePtr(ptr);    cout << "传值方式传入函数跳出后的指针指向:" << ptr << endl;    cout << "传入前指针指向的值为:" << *ptr << endl;    ChangePtrVal(ptr);    cout << "从函数中出来后指针指向的值为:" << *ptr << endl;}void ChangeRef(int& ref){    ref++;    cout << "引用内修改后的值为:" << ref << endl;}void ChangeNotRef(int ref){    ref++;    cout << "通过传值方式在函数内修改后的值为:" << ref << endl;}void ChangePtr(int* ptr){    ptr++;    cout << "函数内修改后的指针指向:" << ptr << endl;}void ChangePtrVal(int* ptr){    (*ptr)++;    cout << "函数内修改后指针指向的值:" << *ptr << endl;}

输出为:这里写图片描述

0 0
原创粉丝点击