关于java与C++中的参数传递

来源:互联网 发布:电纸书推荐 知乎 编辑:程序博客网 时间:2024/05/21 18:37

闲来无事,对比一下以前学过的java和C++,记上一笔,以防以后忘记吧!

java分为基本类型和对象传递,对于基本类型的传递属于值复制的情况;而对于对象传递,修改的就是对象本身了。几种基本类型也有自己对应的类,例如int对应Integer这样子。String不是基本类型,传递的是对象,但是String需要注意的是immutable的,所以对于它的处理不能改变它本身,只可以重新赋给一个新String来改变值。


而C++的参数传递更复杂,在我看来主要是有两种,一种是值复制的情况(指针传递也可以看成值复制,不过传递的值是地址而已),另一种是引用传递(相当于变量的一个别名)。C++的指针其实就是内存中的一块地址而已。看到的一个比较好的例子是下面的例子:


#include "stdafx.h"
#include <iostream>
using namespace std;


//值传递
void swap1(int p,int q)
{
    int temp;
    temp=p;
    p=q;
    q=temp;
}


//指针传递,函数体内只有指针值的变化
void swap2(int *p,int *q)
{
    int temp;
    temp=*p;
    *p=*q;
    *q=temp;
}


//指针传递,函数体内只有指针的变化
void swap3(int *p,int *q)
{
    int *temp;
    temp=p;
    p=q;
    q=temp;
}


//引用传递,a的别名是p,b的别名是q
void swap4(int &p,int &q)
{
    int temp;
    temp=p;
    p=q;
    q=temp;
}


int main()

    int a=1,b=2;
    swap1(a,b);
    swap2(&a,&b);
    swap3(&a,&b);
    swap4(a,b);
    cout<<a<<"  "<<b<<endl;
    return 0;
}

只有swap2和swap4可以做到交换值。可以画栈中的示意图,牢记住指针其实就是地址!!!!!


对于内存中的地址分配,我觉得C++和Java是一样的,当然,这只是我自己短浅的认为。局部变量都是存储在栈当中,而动态变量则是存储在堆当中。


0 0
原创粉丝点击