C++ 基础:传参的基本形式-基本类型,对象,引用和指针

原创 2016年08月28日 22:44:20

(1)基本类型
(2)直接传递对象

class A
{
public:
    A(int param) {
        m_a = param;
    }

    A(const A& b)
    {
        m_a = b.m_a;
        std::cout << "copy method" << std::endl;//输出copy method
    }
    int m_a;
};
void FuncChangeA(A a) 
{
    a.m_a = 2;
}

int main()
{


    A a(3);
    FuncChangeA(a);
    std::cout << a.m_a << std::endl;//输出3

    return 0;
}

直接传递对象在函数内的对象和外部对象没有关系。实际上是调用了一个拷贝构造函数来实现的。
(3)传递引用
格外提一句,引用是对象的别名,不能将指针的直接赋值给引用。首先需要先解指针。当然内存释放的时候记着取地址。对象的别名嘛。

    A& ra = *new A(3);
    delete &ra;

既然是对象的别名。能出现对象的场合就该能出现引用。但是,传参的时候不是取决于你穿进去的是一个对象和是一个对象的引用。因为在外部来看,这两个完全可以替换使用。是传引用还是传对象,取决于函数参数列表的声明。

class A
{
public:
    A(int param) {
        m_a = param;
    }

    A(const A& b)
    {
        m_a = b.m_a;
        std::cout << "copy method" << std::endl;
    }
    int m_a;
};
void FuncChangeA(A& a) 
{
    a.m_a = 2;
}
int main()
{
    A& ra = *new A(3);

    FuncChangeA(ra);
    std::cout << ra.m_a << std::endl;
    delete &ra;
    return 0;
}

上述程序只输出一个2.可见内部函数改变了外部对象的值。
从底层来讲,引用实际是一个指针常量。对象的引用就是对象的机器地址。和指针不同的是,引用变量定义的时候必须初始化。引用也可以取地址,但是取地址的结果不是引用变量的地址,而是引用指向对象的地址。当你传递引用时,编译器并不将对象压到堆栈里,而是将对象将地址值进行压栈。
(4)传递指针

class A
{
public:
    A(int param) {
        m_a = param;
    }

    A(const A& b)
    {
        m_a = b.m_a;
        std::cout << "copy method" << std::endl;
    }
    int m_a;
};
void FuncChangeA(A* a) 
{
    a->m_a = 2;
}

int main()
{


    A* pa = new A(3);

    FuncChangeA(pa);
    std::cout << pa->m_a << std::endl;
    delete pa;
    return 0;
}

c++代码赏析之类对象传参

#include using namespace std;class A { private: int x;public: A():x(0) { x = 0; cout
  • lonelyrains
  • lonelyrains
  • 2016年03月24日 20:35
  • 1700

C/C++函数形参传实参时值传递、指针传递、引用传递的区别

值传递:形参是实参的副本(复制、拷贝),形参值的改变不会影响实参的值,这种方式是很常见的。 指针传递:形参是指针类型,形参作指针运算后指向的就是实参,所以会影响实参的值。这种方式也是很常见的。 引用传...
  • wenhao_ir
  • wenhao_ir
  • 2016年06月08日 10:59
  • 2613

c++中函数参数传递(值传递、指针传递,引用传递)进一步认识

今天想写一个函数,从函数中把我需要的两个值传出来,由于传出来的值比较多,所以不考虑用return来返回,需要通过参数把修改后的值拉出来供我使用,很当然的就想到了用指针,但是值就是传不出来;使我对原有的...
  • richerg85
  • richerg85
  • 2013年11月07日 19:05
  • 18076

Jni中C++和Java的参数传递

如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章: 这 些资料...
  • StoneNotes
  • StoneNotes
  • 2016年09月19日 17:54
  • 968

C/C++语言函数参数传递:传值,传指针,传引用

前面我们介绍了函数的调用约定,明白了函数调用者与被调用者之间传递参数的顺序与如何进行栈恢复的。 实际上,函数调用者如何将参数传递给被调用者也是有讲究的。 总的来说,函数参数传递分为3种情况:传值,传指...
  • u012713968
  • u012713968
  • 2016年01月08日 14:50
  • 493

C++类的对象和类的指针的区别、指针和引用的区别

#include #include using namespace std; class Student { public: static int number; str...
  • liulina603
  • liulina603
  • 2015年08月05日 08:44
  • 2984

C/C++中函数传参方式简述

提到函数传参,必然就会面对“传值”和“传址”问题,C++中还会涉及到“传引用”。...
  • playboy_lei
  • playboy_lei
  • 2016年07月21日 15:55
  • 1100

二级指针和指针引用函数传参(C++)

在函数的使用过程中,我们都明白传值和传引用会使实参的值发生改变。那么能够通过传指针改变指针所指向的地址吗?在解决这个问题之前,也许我们应该先了解指针非常容易混淆的三个属性: ①.指针变量地址(...
  • qq_32483145
  • qq_32483145
  • 2016年10月23日 13:18
  • 1312

值类型和引用类型,形参和实参,传值和传引用

C# 中有两种类型:引用类型和值类型。 传值,传引用——多角度论述,力求清晰、准确...
  • ma15732625261
  • ma15732625261
  • 2016年01月28日 19:57
  • 999

C++,Java值传递,引用传递

1.除内置类型、STL迭代器和函数对象采用“pass-by-value”(值传递),其他尽量采用pass-by-reference-const 替换 pass-by-value,实现形式“const ...
  • woliuyunyicai
  • woliuyunyicai
  • 2015年03月06日 10:12
  • 1050
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 基础:传参的基本形式-基本类型,对象,引用和指针
举报原因:
原因补充:

(最多只允许输入30个字)