-
2021-12-17 21:34:45
把实参数组传递给函数,则形参从数组那里得到了起始地址,因此数组与实参数组共占了同一段内存单元,在函数调用期间,该变了形参数组的值,也就改变了实参数组的值。
例:
int i = 12; int *p = & i; //此时*p与i共占同一段内存单元, *p = 23; //此时改变了*p的值,i的值也就跟着改变了。此时 i = 23;
*p表示形参数组,i表示实参,它们共占同一段内存单元即i的地址 ,所以改变形参能改变实参的值
更多相关内容 -
JAVA里怎么样在调用方法时同时改变实参的值 (形参改变实参)
2021-03-07 03:08:20实参:如果是基本类型,则实参不会变(传的是值);如果是对象,则实参会改变(传的是引用)。例如:public class Java{ public static void main(String[] args) { int b =5; changeInt(b); System.out.println(b);}...实参:如果是基本类型,则实参不会变(传的是值);
如果是对象,则实参会改变(传的是引用)。
例如:
public class Java{ public static void main(String[] args) { int b =5; changeInt(b); System.out.println(b);
}
public static int changeInt(int a){ a =10; return a; }
}
为什么changeInt(b)之后输出的是5?
把b传到changeInt方法中之后为什么b的值没改变?
是这样的,基本类型和String均为值传递,想要实现你的需求只能改用对象,当然也可以使用集合类比如Map,或者数组(这个比较方便)。
更正:
public class Java{ public static void main(String[] args) { int b =5; b = changeInt(b); System.out.println(b);
}
public static int changeInt(int a){ a = 10; return a; }
}
changeInt(b)之后输出的是10。
-
Java如何在调用方法时,同时改变实参的值? 即 形参改变实参
2021-03-10 07:21:03关键点:实参:如果是基本类型,则实参不会变(传的是值);如果是对象,则实参会改变(传的是引用)。具体实例和分析如下:示例一:传入参数为整形变量:public class Java{public static void main(String[] args){int...关键点:
实参:如果是基本类型,则实参不会变(传的是值);
如果是对象,则实参会改变(传的是引用)。
具体实例和分析如下:
示例一: 传入参数为整形变量:
public class Java{
public static void main(String[] args)
{
int b =5;
changeInt(b);
System.out.println(b);
}
public static int changeInt(int a){
a =10;
return a;
}
}
changeInt(b)之后输出的是5。
把b传到changeInt方法中之后为什么b的值没改变?
是这样的,基本类型和String均为值传递,想要实现你的需求只能改用对象,当然也可以使用集合类比如Map,或者数组(这个比较方便)。
也就是说,传入参数为字符串变量时同样如此。
说明:在java类执行时,基本类型变量是存储在栈中的,压栈顺序:(1)主方法压栈->(2)变量b压栈->(3)静态方法changeInt压栈->(4)压栈参数并修改为10->(5)退出changeInt方法,并弹出changeInt方法及其作用域内的数据->(6) 退出main方法。
打印结果5是打印经过方法修改为10后,退出方法后打印的变量的值,由于基本数据类型存储在栈中,因此退出方法后,变量的值仍然是变量最初所在栈位置的值5.
示例二:传入的是对象
public class Java{
public static void main(String[] args)
{
int b =5;
b = changeInt(b);
System.out.println(b);
}
public static int changeInt(int a){
a = 10;
return a;
}
}
changeInt(b)之后输出的是10。
示例三: 传入的是数组
public static void main(String[] args){
int[]a = {23,57};
print(a);
test(a);
print(a);
}
publicstatic void test(int[] num){ //颠倒数组
inttemp = 0;
for(inti = 0;i < num.length/2; i++){
temp= num[i];
num[i]= num[num.length - 1 - i];
num[num.length- 1 - i] = temp;
}
}
publicstatic void print(int[] num){ //打印数组
for(inti = 0; i < num.length; i++){
System.out.print(num[i]+"");
}
System.out.println();
}
输出:
23 57
57 23
为什么在这里方法退出后,变量的值变不回去了呢?
说明:在java中,数组是引用类型变量,可以看成是一个对象,在创建一个数组时,和创建一个新的对象时同样的道理(毕竟创建时使用new关键字了),这个对象存放在堆内存中,栈内存中只是存放了它的位置索引(即在堆内存中的位置,相当于栈中放了它的门牌号),这样在test方法中引用了数组变量,同样是通过栈中存放的位置索引找到这个变量在堆内存中的位置,然后进行修改操作,test方法可不是将它重新压到栈中再修改的,是直接在堆中改,直接在堆中改,直接在堆中改(重要的事情说三遍),然后很淡定的退出了test方法,它是退出没事了,堆中的数组变量已经被不可逆转的修改了,因此test方法前和方法后打印出来的数组内容是不一样的。
-
关于C++中改变实参的方法
2022-03-30 20:00:15其实是C++的知识,其在此处的作用是使函数运行后可以改变实参。 首先,在调用函数时,实参一般不会被改变,如下 输出如下 但有两种方法可以通过函数改变实参 1.使用引用 & 运行结果如下 ...首先说明一下,&其实是C++的知识,其在此处的作用是使函数运行后可以改变实参。
首先,在调用函数时,实参一般不会被改变,如下
输出如下
但有两种方法可以通过函数改变实参
1.使用引用 &
运行结果如下
可以看到成功地改变了实参的值
2.当形参是指向实参的指针时,例如数组
在严蔚敏版教材中,LinkList可以定义指向List的指针
在PTA上刷题过程中,发现其中的函数参数时而是LinkList L,时而是LinkList &L,百度的代码还会有LinkList *L这种写法,本人看到后很是疑惑,因此很多题都过不了,在看过各篇大佬写的博客后本人也有了一些见解。
1.当函数参数为LinkList L时,意味着只改变List的内容,而不需要改变L这个指针
如
Status GetElem(LinkList L,int i,ElemType e)
2.当参数为LinkList &L时,意味着需要改变L这个指针本身
如
Status InitList(LinkList &L) { L=(LinkList)malloc(sizeof(struct LNode)); ...... }
这里想初始化单链表,需要给L分配内存空间,即需要改变L
3.当参数为LinkList *L时,意味着需要改变L这个指针指向的LinkList类型的指针
此时给头结点分配储存空间时要这样写
(*L)=(LinkList)malloc(sizeof(struct LNode));
L前面要加*,表示L所指向的那个指针
-
关于值传递形参不改变实参原理及如何使用地址传递修改实参
2022-06-15 21:11:16关于值传递形参不改变实参原理及如何使用地址传递修改实参 -
Java形参什么时候能改变实参的值
2021-07-22 10:06:01形参到实参有两种传递形式,值传递和引用数据类型传递。其中,值传递是不可更改实参的值的。但注意,引用数据类型中的String也是不可更改实参的,所以归为值传递! -
c++指针使用形参改变实参的方法
2020-08-31 03:13:09下面小编就为大家带来一篇c++指针使用形参改变实参的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
关于java数组,形参的改变,会改变实参的值
2022-05-27 14:09:02当java数组调用一个方法,将数组传进去 public static void main(String[] args) { int arr[] = { 6,1,2,3,4,5 }; sort(arr, arr.length); for (int i = 0;...所以当形参数组的值改变时,实参的值也随之改变 -
浅谈c++中形参不能改变实参
2020-04-03 18:48:52c语言我们都知道形参不能改变实参,实参能改变形参,我们能保证自己很熟悉这个概念吗,能不能保证自己每次都不犯错,掉坑里。 #include <iostream.h> #include <string.h> void fun( char *s) { char a... -
用指针解决形参改变实参
2020-05-17 23:59:09当函数需要用形参改变实参时,简单的传值不能解觉问题。这时就需要使用指针解决问题。 例:int a=10;b=20;要求写一个函数将a,b的值互换。 错误代码: 1. //交换失败,原因a,b仅仅只是赋值,main中的a和Swap中的a不是... -
如何理解不能通过调用函数来改变实参指针变量的值
2021-12-01 20:56:10不能通过调用函数改变指针变量的值, -
关于自定义函数中通过形参改变实参的问题
2019-10-03 13:29:16实际参数(实参): 真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。 形式参数(形参): 形式... -
为什么指针变量做形参可以改变实参的数据
2021-11-14 00:44:03形参不能传任何东西给实参,实参传过去的东西都是一个副本!!! 下面以一个交换数据的被调函数片段为例 在指针变量由实参传递给形参时传过去的实际是指针变量的值,即一个地址,在 t=*p1 *p1=*p2 *p2=t 的过程中实际是... -
数组作为函数参数使用,改变实参
2019-11-23 11:22:23#include #include <Windows.h> using namespace std; //成绩 void Bchievementprint(int achievement[],int n) {//形参本质上是指针,占用int4字节 for (int i = 0; i <... i + 1 <... -
c语言函数的值传递机制(swap函数怎么通过形参改变实参的值)
2021-10-03 20:41:43实际内存中就是这样的: 这样就可以实现形参与实参的同步改变了,因为它们实际上是一个人的两个名字,叫哪个说的都是同一个人。在swap函数结束时销毁掉的也只是x、y这两个名字,而不是那个人。 这样的话是不是就有一... -
C语言中,如何利用函数和指针变量通过形参变量的值改变实参变量的值
2021-05-22 08:45:47必备知识:c语言中的函数调用和...函数的一个功能就是传递数值进行运算,那么我们如何利用函数和指针变量通过形参变量的值改变实参变量的值呢?首先,让我们先举一个例子。#includeint main(){void func(int a,int ... -
C语言小细节(1)——用指针实现函数形参改变实参
2020-10-28 09:02:05用指针实现函数形参改变实参 在普通情况下,定义一个带有形参的子函数之后,当调用函数调用该子函数时,实参的值只是复制给形参,再参与子函数里面的数值运算,但原实参的值并不会改变, 举个栗子 #include <... -
关于java中形参值和实参值的总结,什么时候会改变实参值
2020-12-24 21:30:35首先Java里面都是值传递,也就是形参的值改变是不会改变实参的值的。 -
JAVA如何在调用方法时改变实参?
2019-03-15 09:45:31引用类型 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是...而传递对象或者数组的时候传递的是引用,改变了内存的堆中的数据,所以形参会改变实参 如果形参是基本类型的... -
c语言——指针作为函数形参,改变实参的值的问题。
2021-05-23 21:03:49所以一般的传值传参不会改变实参的值。但是若是函数的形参是指针变量的话在调用函数时将变量的地址传递给指针,在函数内部对函数进行解引用改变指针的值那么相应实参的值也会被更改。这就是所谓的传址传参。这种传参... -
Python : 函数参数List 形参改变实参问题
2020-04-07 09:32:33在学习Python 中的排序中,发现一个问题,写的排序函数会改变实参中的原List,不方便,我做对比,经过查询和学习,总结如下: List 改变某一项值,会改变实参。 整体从新赋值,不会改变实参。 原因为形参和实参这两... -
C语言函数传递中形参的变化不会改变实参的值
2021-05-22 06:05:04如题,C语言在函数间传递参数时,形参的变化是不会改变实参的值的!!!如:includevoid main(){void swap(int,int);int a,b;scanf("%d,%d",&a,&b);swap(a,b);}void swap(int a,int b){int temp;temp = a;a ... -
Java中形参值改变什么时候会改变实参
2021-08-15 09:58:15刚学习Java的时候应该都听过Java中没有指针,所以实参传基本数据类型形参改变不会影响实参(基本数据类型存在栈中方法结束后,形参会被弹出栈,实参并没有变化),而实参传入引用数据类型时形参改变会影响实参(引用数据... -
Python中list与dictionary作为函数的形参时,会该改变 实参
2020-12-10 22:00:31这意味着,当函数有 list 或者 dictionary 作为形参时, 会改变其 实参的值(在函数中若改动其值)。 (对比, 在c或者c++ 中,函数调用 发生的数据传递时单向的, 即, 只能把实参的值 传递给形参, 而不能把形参... -
值传递-形参改变实参不变
2020-03-09 09:16:38形参改变前 形参改变后 -
C++结构体指针做函数参数不会改变实参的值
2020-09-01 16:21:26在做一道经典的深度优先搜索二叉树的题目时遇到一个问题,即C++中将结构体指针作为参数传递时,并不会改变实参的值!原因是当结构体指针传递给函数时,会拷贝一份指针的值,但是函数内部的指针和函数外部的指针并... -
Java中型参是否会改变实参
2021-08-05 10:08:30对于对象实例,传递的也是引用,会改变实参; Note:但实例对象并不是所有情况都改变的,例如自定义一个swap函数交换两个对象,如下: public void swap(A x, A y) { A temp = x; x = y; y = temp; } 这种情况... -
在调用方法时,若要使方法改变实参的值,可以用对象作为参数?
2019-08-06 16:24:44在调用方法的时候,若要使方法改变参数的值,可以() A.用基本数据类型作为参数 B.用对象作为参数 C.以上都对 D.以上都不对 public class Test { public static void main(String[] args) { int a = 5; ...