精华内容
下载资源
问答
  • 定义一个函数,实现两个参数的交换。在主函数中输入3个实数,按升序排序后输出。 1)要求用变量指针作为函数参数,在被调函数中实现变量值的交换。 2)要求参数为引用类型,在被调函数中实现变量值的交换。 #...

    指针传参和引用传参比较。 定义一个函数,实现两个参数的交换。在主函数中输入3个实数,按升序排序后输出。 1)要求用变量的指针作为函数参数,在被调函数中实现变量值的交换。 2)要求参数为引用类型,在被调函数中实现变量值的交换。

    #include<iostream>
    using namespace std;
    void swap(int *p,int *q){
    	int temp;
    	temp=*q;
    	*p=*q;
    	*q=temp;
    }
    void swap1(int &p,int &q){
    	int temp;
    	temp=p;
    	p=q;
    	q=temp;
    }
    void change(int *p1,int *p2,int *p3){
    	if(*p1>*p2) swap(p1,p2);
    	if(*p1>*p3) swap(p1,p3);
    	if(*p2>*p3) swap(p2,p3);
    }
    
    void change1(int &p1,int &p2,int &p3){
    	if(p1>p2) swap1(p1,p2);
    	if(p1>p3) swap1(p1,p3);
    	if(p2>p3) swap1(p2,p3);
    }
    int main(){
    	int a,b,c,*q1,*q2,*q3;
    	cout<<"请输入三个数:"<<endl;
    	cin>>a>>b>>c;
    	q1=&a;q2=&b;q3=&c;
    	change(q1,q2,q3);
    	cout<<"使用指针传参排序后:"<<a<<" "<<b<<"  "<<c<<endl;
    	change1(*q1,*q2,*q3);
    	cout<<"使用引用传参排序后:"<<a<<" "<<b<<" "<<c<<endl;
    	return 0; 
    }
    
    展开全文
  • 一、参数传递方法解决标题问题,首先介绍参数传递方法。目前各类程序设计语言的参数传递方法主要有三种:1.按值传递2.按引用传递3.按指针传递其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变...

    一、参数传递方法

    为解决标题问题,首先介绍参数传递方法。目前各类程序设计语言的参数传递方法主要有三种:

    1.按值传递

    2.按引用传递

    3.按指针传递

    其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值;按引用传递表示方法(函数)接收的调用者提供的变量地址;按指针传递表示方法(函数)接收的是调用者提供的指针的拷贝,不改变指针的值和地址,但可以改变指针所指向的地址。

    二、java参数传递方法

    java提供的参数传递方法,很遗憾只有一种,按值传递。也就是说,方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的参数变量的内容。

    java的方法参数类型可以分为两类:

    1.基本数据类型

    2.对象引用

    有过java开发经验的朋友都知道,对于基本数据类型,java方法无法改变变量内容。那对自定义类的对象引用是否也不能修改内容呢?可以通过一个简单的例子说明。代码如下:

    pubpc class myclass{

    private object num;

    pubpc myclass(object num){

    this.num=num;

    }

    pubpc object getnum() {

    return num;

    }

    pubpc void setnum(object num) {

    this.num = num;

    }

    }

    pubpc class main {

    pubpc static void change(myclass myclass){

    myclass.setnum(100);

    }

    pubpc static void main(string[] args){

    myclass a=new myclass(10);

    system.out.println("调用change方法前的值为:"+a.getnum());

    change(a);

    system.out.println("调用change方法后的值为:"+a.getnum());

    }

    }

    上面代码执行输出结果如下:

    a739fb3cfa1069cbea9280836f26d327.png

    从结果中可以看出,change方法能够修改对象的状态。也就是说java方法可以改变对象的参数状态。那这是否意味着java方法对于自定义的数据类型(自定义类)的参数采用的是引用传递?为了确认结果可以编写个简单例子,所有的自定义类仍然是上面的myclass。代码如下:

    pubpc static void swap(myclass a,myclass b){

    myclass tmp=a;

    a=b;

    b=tmp;

    }

    pubpc static void main(string[] args){

    myclass a=new myclass(10);

    myclass b=new myclass(100);

    system.out.println("交换之前a的值为:"+a.getnum());

    system.out.println("交换之前b的值为:"+b.getnum());

    swap(a,b);

    system.out.println("交换之后a的值为:"+a.getnum());

    system.out.println("交换之后b的值为:"+b.getnum());

    }

    }

    执行结果如下:

    58fd5955da224d3ba73674c5df39bf64.png

    通过上面结果可以发现,java方法对自定义类的参数传递使用的仍然是值传递,不是引用传递。那为什么java方法能够修改对象状态呢?

    可以考虑调用change方法的具体执行过程,从中寻找答案。

    调用change方法事,具体的执行过程是:

    myclass被初始化成实参a的copy,这是对对象的引用。

    setnum方法应用于这个对象的引用。myclass和a同时引用的那个myclass对象的num变为了100。

    方法结束后,参数变量myclass不再使用。而a继续引用那个num变为100的myclass对象。如下图所示。

    e8a6099708888e3b578925a49e2f71d8.png

    所以,java方法能够实现改变对象参数状态的原因是:方法得到的是对象引用的拷贝,对象引用及方法中的其他拷贝同时引用同一个对象。

    现在,总结一下java的方法参数使用:

    方法不能修改一个基本数据类型的参数;

    方法可以改变对象参数的状态;

    方法不能让对象参数引用一个新的对象(原因参考调用change方法时的具体执行过程)。

    三、交换变量的数值

    既然已经知其所以然,那么知其然就不是难事了。直接贴出我的个人代码:

    pubpc static void swap(myclass a,myclass b){

    object tmp=a.getnum();

    a.setnum(b.getnum());

    b.setnum(tmp);

    }

    执行结果如下:

    554537b6ec34e9db61793d37ed26b953.png

    交换有效。

    参考文献:java核心技术 卷ⅰ。

    以上这篇java 交换两个变量的数值实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

    希望与广大网友互动??

    点此进行留言吧!

    展开全文
  • 一、参数传递方法解决标题问题,首先介绍参数传递方法。目前各类程序设计语言的参数传递方法主要有三种:1.按值传递2.按引用传递3.按指针传递其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变...

    一、参数传递方法

    为解决标题问题,首先介绍参数传递方法。目前各类程序设计语言的参数传递方法主要有三种:

    1.按值传递

    2.按引用传递

    3.按指针传递

    其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值;按引用传递表示方法(函数)接收的调用者提供的变量地址;按指针传递表示方法(函数)接收的是调用者提供的指针的拷贝,不改变指针的值和地址,但可以改变指针所指向的地址。

    二、Java参数传递方法

    Java提供的参数传递方法,很遗憾只有一种,按值传递。也就是说,方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的参数变量的内容。

    Java的方法参数类型可以分为两类:

    1.基本数据类型

    2.对象引用

    有过Java开发经验的朋友都知道,对于基本数据类型,Java方法无法改变变量内容。那对自定义类的对象引用是否也不能修改内容呢?可以通过一个简单的例子说明。代码如下:

    pubpc class MyClass{

    private Object num;

    pubpc MyClass(Object num){

    this.num=num;

    }

    pubpc Object getNum() {

    return num;

    }

    pubpc void setNum(Object num) {

    this.num = num;

    }

    }

    pubpc class Main {

    pubpc static void change(MyClass myClass){

    myClass.setNum(100);

    }

    pubpc static void main(String[] args){

    MyClass a=new MyClass(10);

    System.out.println("调用change方法前的值为:"+a.getNum());

    change(a);

    System.out.println("调用change方法后的值为:"+a.getNum());

    }

    }

    上面代码执行输出结果如下:

    bf8b54411e188ce271f9eaf63ebedeb2.png

    从结果中可以看出,change方法能够修改对象的状态。也就是说Java方法可以改变对象的参数状态。那这是否意味着Java方法对于自定义的数据类型(自定义类)的参数采用的是引用传递?为了确认结果可以编写个简单例子,所有的自定义类仍然是上面的MyClass。代码如下:

    pubpc static void swap(MyClass a,MyClass b){

    MyClass tmp=a;

    a=b;

    b=tmp;

    }

    pubpc static void main(String[] args){

    MyClass a=new MyClass(10);

    MyClass b=new MyClass(100);

    System.out.println("交换之前a的值为:"+a.getNum());

    System.out.println("交换之前b的值为:"+b.getNum());

    swap(a,b);

    System.out.println("交换之后a的值为:"+a.getNum());

    System.out.println("交换之后b的值为:"+b.getNum());

    }

    }

    执行结果如下:

    8b2abf89cba4e403c3d455e126f66c04.png

    通过上面结果可以发现,Java方法对自定义类的参数传递使用的仍然是值传递,不是引用传递。那为什么Java方法能够修改对象状态呢?

    可以考虑调用change方法的具体执行过程,从中寻找答案。

    调用change方法事,具体的执行过程是:

    myClass被初始化成实参a的copy,这是对对象的引用。

    setNum方法应用于这个对象的引用。myClass和a同时引用的那个MyClass对象的num变为了100。

    方法结束后,参数变量myClass不再使用。而a继续引用那个num变为100的MyClass对象。如下图所示。

    e107360727eb8ec4cdb7d31a179445ae.png

    所以,Java方法能够实现改变对象参数状态的原因是:方法得到的是对象引用的拷贝,对象引用及方法中的其他拷贝同时引用同一个对象。

    现在,总结一下Java的方法参数使用:

    方法不能修改一个基本数据类型的参数;

    方法可以改变对象参数的状态;

    方法不能让对象参数引用一个新的对象(原因参考调用change方法时的具体执行过程)。

    三、交换变量的数值

    既然已经知其所以然,那么知其然就不是难事了。直接贴出我的个人代码:

    pubpc static void swap(MyClass a,MyClass b){

    Object tmp=a.getNum();

    a.setNum(b.getNum());

    b.setNum(tmp);

    }

    执行结果如下:

    bc7047a86b52b1a1128912a7f4740953.png

    交换有效。

    参考文献:Java核心技术 卷Ⅰ。

    以上这篇Java 交换两个变量的数值实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    展开全文
  • 一、参数传递方法解决标题问题,首先介绍参数传递方法。目前各类程序设计语言的参数传递方法主要有三种:1.按值传递2.按引用传递3.按指针传递其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变...

    一、参数传递方法

    为解决标题问题,首先介绍参数传递方法。目前各类程序设计语言的参数传递方法主要有三种:

    1.按值传递

    2.按引用传递

    3.按指针传递

    其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值;按引用传递表示方法(函数)接收的调用者提供的变量地址;按指针传递表示方法(函数)接收的是调用者提供的指针的拷贝,不改变指针的值和地址,但可以改变指针所指向的地址。

    二、Java参数传递方法

    Java提供的参数传递方法,很遗憾只有一种,按值传递。也就是说,方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的参数变量的内容。

    Java的方法参数类型可以分为两类:

    1.基本数据类型

    2.对象引用

    有过Java开发经验的朋友都知道,对于基本数据类型,Java方法无法改变变量内容。那对自定义类的对象引用是否也不能修改内容呢?可以通过一个简单的例子说明。代码如下:

    ?

    ?

    上面代码执行输出结果如下:

    c84ce32410054e5fc234381ab5ec4c6f.png

    从结果中可以看出,change方法能够修改对象的状态。也就是说Java方法可以改变对象的参数状态。那这是否意味着Java方法对于自定义的数据类型(自定义类)的参数采用的是引用传递?为了确认结果可以编写个简单例子,所有的自定义类仍然是上面的MyClass。代码如下:

    ?

    执行结果如下:

    915cc16dbed74543331602ab844d3c21.png

    通过上面结果可以发现,Java方法对自定义类的参数传递使用的仍然是值传递,不是引用传递。那为什么Java方法能够修改对象状态呢?

    可以考虑调用change方法的具体执行过程,从中寻找答案。

    调用change方法事,具体的执行过程是:

    myClass被初始化成实参a的copy,这是对对象的引用。

    setNum方法应用于这个对象的引用。myClass和a同时引用的那个MyClass对象的num变为了100。

    方法结束后,参数变量myClass不再使用。而a继续引用那个num变为100的MyClass对象。如下图所示。

    52079386406d9007768cb6339ba5d035.png

    所以,Java方法能够实现改变对象参数状态的原因是:方法得到的是对象引用的拷贝,对象引用及方法中的其他拷贝同时引用同一个对象。

    现在,总结一下Java的方法参数使用:

    方法不能修改一个基本数据类型的参数;

    方法可以改变对象参数的状态;

    方法不能让对象参数引用一个新的对象(原因参考调用change方法时的具体执行过程)。

    三、交换变量的数值

    既然已经知其所以然,那么知其然就不是难事了。直接贴出我的个人代码:

    ?

    执行结果如下:

    5a5eaa0dc03ce2b6562f8a99193670b1.png

    交换有效。

    参考文献:Java核心技术 卷Ⅰ。

    以上这篇Java 交换两个变量的数值实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

    展开全文
  • 简单的两个变量的值交换,C\C++中使用指针可以将这个功能封装函数来复用,那么这个功能在Java中怎么封装起来呢? java中swap函数的实现分析 在C/C++里面交换值的方法: void swap(int&a ,int&b) { ...
  •  想实现一个函数,功能为实现两个变量交换。即如下函数: void swap(int a ,int b) {  int p;  p=a;  a=b;  b=a; }   但是调用时,如何传递变量成了个...
  • 如上所示,swap函数传递进来的是两个整形变量的地址,有两个问题 1、那么swap的实现里面,什么直接交换a,b的值就实现了地址交换?难道这里的a,b代表指针吗? 2、使用swap时什么没有使用swap(&i,&j)? 初学...
  • 指针运算和数据类型相关: ...2、用指针实现交换两个变量的值 主函数中传递参数时要把a和b的地址传递过去,即赋值 pa=&a,pb=&b,如果传递普通变量,其值并不会发生变化 3、利用指针将某一位清0置1 清...
  • 在C ++中,我们可以通过指针或引用将参数传递给函数。在这种情况下,我们得到的结果都是相同的。因此,以下问题是不可避免的;什么时候比另一种更好?我们什么一使用另一的原因是什么? 通过指针: 输出...
  • 3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition)?a:b)=complicated_expression; 3.19 我有些代码包含这样的表达式。a?b=c:d有些编译器可以接受,有些却不能。...
  • 3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition)?a:b)=complicated_expression;  3.19 我有些代码包含这样的表达式。a?b=c:d有些编译器可以接受,有些却不能。...
  • 3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition) ? a : b)= complicated_expression; 70 3.19 我有些代码包含这样的表达式。a ? b=c : d 有些编译器可以接受,...
  •  3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition)?a:b)=complicated_expression; 3.19 我有些代码包含这样的表达式。a?b=c:d有些编译器可以接受,有些却不能。...
  • 3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition) ? a : = complicated_expression; 3.19 我有些代码包含这样的表达式。a ? b=c : d 有些编译器可以接受,有些却...
  • 3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition) ? a : b)= complicated_expression; 41  3.19 我有些代码包含这样的表达式。a ? b=c : d 有些编译器可以接受...
  • 《你必须知道的495C语言问题》

    热门讨论 2010-03-20 16:41:18
    3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition) ? a : b)= complicated_expression; 41  3.19 我有些代码包含这样的表达式。a ? b=c : d 有些编译器可以接受...
  • 3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition) ? a : = complicated_expression; 3.19 我有些代码包含这样的表达式。a ? b=c : d 有些编译器可以接受,有些却...
  • (3)两个指针变量之间的运算只有指向同一数组的两个指针变量之间才能进行运算, 否则运算毫无意义。 ①两指针变量相减 两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值(地址) ...
  • 你必须知道的495C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    3.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一 个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated expression; . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 目录iii ...
  • 问题分析:编写一个函数reverse_string(char *string)实现:将函数...2.定义两个指针变量left,right,和一个中间变量实现首末值和中间值的交换。3.调用reverse_string这个函数,将返回值设事先保留字符串的首地址...
  • Questions

    2006-04-26 07:38:00
    1.智能指针2.COM实现的原理3.printf()可变参数实现4.vector追加数据如何实现。是底层如何实现,不能用现有的5.java的GC如何实现什么?如何自己实现?用什么数据结构6.二叉搜索树和哈希表哪个...如何交换两个变量
  • 入门学习Linux常用必会60命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    虚拟控制台的切换可以通过按下Alt键和一功能键来实现,通常使用F1-F6 。 例如,用户登录后,按一下“Alt+ F2”键,用户就可以看到上面出现的“login:”提示符,说明用户看到了第二虚拟控制台。然后只需按“Alt+...
  • 18.3.1 swap() 交换两个字符串的内容 389 18.3.2 将string型字符串转为char型字符串 390 18.3.3 char型字符串与函数 391 18.3.4 函数如何返回字符串 392 18.4 结构体 394 18.4.1 结构体的赋值 397 18.4.2 ...
  • 从C到C++ c++对c扩展主要是为了实现面向对象,但有一些简单的扩展与面向对象关系不大,在这一节中...可以更方便的交换两个变量值 C中的swap函数: void swap(int *a,int *b)//参数是两个指针 { int tmp; tmp=*a;*a=*
  • // 一个包含两个元素的数组 $a[0] = "first"; $a[1] = "second"; $a[] = "third"; // 添加数组元素的简单方法 // 现在$a[2]被赋值"third" echo count($a); // 打印出3,因为该是...
  • o 4.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated_expression; * 5. 指针 o 5.1 我想声明一个指针它分配一些空间, 但却...
  • 10.14写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型: 88 10.15编写一个程序,打入月份号,输出该月的英文月名。例如,输入”3”,则输出”March”,要求用指针数组处理。 89 10.16用指向...
  • c++ 面试题 总结

    2009-09-16 08:44:40
    两个好象是一样的,此时*p可以修改,而p不能修改。 (4)const char * const p 这种是地址及指向对象都不能修改。 -------------------------------------------------------------------------- 6.下面是C语言中...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

参数为指针实现两个变量交换