精华内容
下载资源
问答
  • 详解C指针(函数的值传递和地址传递)
    千次阅读 多人点赞
    2019-05-27 14:26:31

    以下所有叙述如果有错误,烦请评论指正

    变量、变量名、地址、指针、普通变量(以整型int为例)、指针变量
    1、变量:变量可以看做是一个容器,这个容器用来存放数据,变量存放在内存中
    2、变量名:变量名实际上是一个地址的符号,当程序编译的时候,操作系统会为变量在内存中分配内存空间,所以每一个变量都会有一个实际的内存地址。系统将变量名和内存地址关联起来,这样我们在操作变量名的时候,实际操作的其实是内存中某一地址对应的空间。
    3、地址:程序是跑在内存中的,程序又将内存分成很多块,用来存储不同的信息。如何找到这些块,就是通过地址。相当于一个小区就是一片内存,而门牌号就是内存地址,通过门牌号就能找到家
    4、指针:指针就是地址,变量在内存中的地址又被称作为指针而已
    5、普通变量(int a):a是变量名,对应内存空间的大小是sizeof(int),对应地址假设是0x001,也就是地址0x001存放的是变量a的值,存放的数据类型是整型
    6、指针变量(char *p):指针变量的本质还是一个变量,只不过存放的数据类型是地址。p是变量名,对应的内存空间的大小是sizeof(char *),对应的地址假设是0x002,也就是地址0x002中存放的是变量p的值,存放的数据类型是指针

    形参和实参

    void fun(int a); /* 这里的a就是形参 */
    int main()
    {
    	int b = 1;
    	fun(b); /* b就是实参 */
    }
    

    总结一句话:形参是函数定义的时候用的,实参是调用函数的时候用的
    函数的参数都是形参,只有在函数调用的时候系统才会为形参分配空间和地址,形参和实参不会是同一个内存地址

    函数传参的值传递和地址传递
    例:int a = 1; a在内存中的地址假设是0x001
    值传递:传递的变量的值,就是传递的是1这个值
    地址传递:传递的是变量的地址,就是传递的是0x001这个地址

    int型变量的值传递和地址传递

    /* 值传递 */
    void fun(int b)
    {
    	b = 1; 
    }
    
    int main()
    {
    	int a = 0;
    	fun(a);
    	printf("a=%d\n", a);
    	return 0;
    }
    

    值传递:调用fun函数的时候,系统会先为b分配空间,然后将a的值赋值给b,也就是b的值就等于0了。但是b的地址与a的地址是不同的,只是对应地址中存放的值是相同的。假设a的地址是0x001,b的地址是0x002,然后空间大小都是sizeof(int),0x001(a)地址空间中存放的是0,0x002(b)空间中的存放的值也是0。当b=1的时候,只是将0x002地址对应的空间赋值为1,与0x001地址对应的空间是没有关系的。所以a仍然是0

    /* 地址传递 */
    void fun(int *b)
    {
    	*b = 1; 
    }
    
    int main()
    {
    	int a = 0;
    	fun(&a);
    	printf("a=%d\n", a);
    	return 0;
    }
    

    地址传递:调用fun函数的时候,b还是形参,只不过变成一个指针变量。假设a地址仍然是0x001,b的地址仍然是0x002。a的地址对应的内存空间中存放的是整型的0,b的地址对应的内存空间中存放的是一个地址,即a的地址0x001。当*b = 1的时候,操作的实际上是0x001这个空间,这个空间对应的就是变量a,所以a的值会变为1

    指针变量的值传递和地址传递
    说明之前先说一下malloc函数:
    malloc:malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址。简单的说就是分配一片内存,返回一个地址,让用户可以通过返回的地址来操作这片内存,我们就称这个地址叫操作地址吧。

    /* 值传递 */
    void fun(char *b)
    {
    	if (b == NULL) {
    		b = (char *)malloc(10);
    	}
    }
    
    int main()
    {
    	char *a = NULL;
    	fun(a);
    	if (a == NULL) {
    		printf("a is null\n");
    	} else {
    		printf("a not null\n")
    	}
    	return 0;
    }
    

    值传递:a是实参,假设地址是0x001,b是形参,假设地址是0x002,a和b都是一个指针变量,占用内存空间是sizeof(char *)。参考上面说的int型变量的值传递,可以得出a和b只是在值上面是相同的,也就是其内存空间中存放的都是NULL而已。在函数fun中调用malloc,假设malloc分配的内存空间的操作地址是0x003,那么现在指针变量b(0x002)的内存空间中的值就从NULL变成了0x003。与int型变量的值传递一样,0x002地址对应的内存空间的修改与0x001地址的对应内存空间是没有任何关系的,所以a依然还是NULL。

    下面说指针变量的地址传递,在地址传递说明之前先看一下二级指针变量的概念:指向指针的指针叫二级指针。简单来说,指针变量是存放地址的变量,不管是一级指针还是二级指针或者多级指针,总结起来都是存放地址的变量。一级指针变量和二级指针变量区别看下面的函数来说明:

    int main()
    {
    	int a = 1;
    	int *p = &a;
    	int **pp = &p;
    }
    

    a是一个整型变量,p是一个一级指针变量,pp是一个二级指针变量。a的内存地址假设为0x001,p假设为0x002,pp假设为0x003。a(0x001)对应内存空间中存放的是整型数值1,p(0x002)内存空间中存放的是a的地址0x001,pp(0x003)中存放的是p的地址(0x002)。所以一级指针变量是其内存空间中存放的地址所对应空间中存放的是一个实际的数值。二级指针变量就是其内存空间中存放的地址所对应的空间中存放的还是一个地址。下面看地址传递

    /* 地址传递 */
    void fun(char **b)
    {
    	if (*b == NULL) {
    		*b = (char *)malloc(10);
    	}
    }
    
    int main()
    {
    	char *a = NULL;
    	fun(&a);
    	if (a == NULL) {
    		printf("a is null\n");
    	} else {
    		printf("a not null\n")
    	}
    	return 0;
    }
    

    a是一个一级指针变量,假设地址为0x001,存放的是NULL,b是一个二级指针变量的形参,假设地址是0x002。在函数调用的时候将a的地址0x001放置到b(0x002)对应的空间中,也就是b现在存放的是0x001。fun函数中的操作是:*b表示取指针对应地址空间的值,取出来的就是0x001地址,将malloc所分配出来的空间的操作地址,假设是0x003,放置到0x001地址对应的空间中了,也就是地址0x001地址中现在存放的是0x003了。所以通过一级指针变量a也能操作malloc出来的空间了。

    为啥free不需要传二级指针
    看下面的代码,结果是最终打印的是"a not null",是不是说明这样写无法正确free呢?

    void fun(char *b)
    {
    	if (b != NULL) {
    		free(b);
    		b = NULL;
    	}
    }
    
    int main()
    {
    	char *a = (char *)malloc(10);
    	if (a != NULL) {
    		fun(a);
    	}
    	
    	if (a == NULL) {
    		printf("a is null\n");
    	} else {
    		printf("a not null\n")
    	}
    }
    

    a是实参,假设地址是0x001,b是形参,假设地址是0x002,malloc分配出来的空间操作地址假设是0x003。从之前的叙述中已经可以得到,当调用fun函数的时候,a和b地址空间中的值应该是相同的,也就是都是0x003。free(b)也就是释放的是0x003地址所指向的内存空间,这个确实也是我们想要释放的内存空间,所以释放完全没有问题。释放之后b=NULL,这个又回到了指针变量的值传递了,所以在main函数中,打印出来的是"a not null"

    总结:如果函数的形参和传入的实参类型一致,就是值传递。如果传入的实参是形参的指针,那就是地址传递

    更多相关内容
  • 值传递和地址传递

    千次阅读 2020-07-09 14:39:59
    传递和地址传递 值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 package dubhe; public class text { public static void main(String[] ...

    值传递和地址传递

    • 值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
    package dubhe;
    
    public class text {
    	public static void main(String[] args) {
    		int a=12;
    		int b=a;//值传递
    		b=100;
    		System.out.println(a);
    	}
    }
    

    输出结果:

    12
    
    • 引用传递:是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
    package dubhe;
    
    public class text {
    	public static void main(String[] args) {
    		int [] array= {12,22};
    		int [] ages=array;//地址传递
    		ages[0]=0;
    		System.out.println(array[0]);
    	}
    }
    

    输出结果:

    0
    
    • 以上述两个程序为例,值传递和地址传递在内存中的具体位置如下图所示:
      在这里插入图片描述
    展开全文
  • C语言函数传递方式-值传递和地址传递

    千次阅读 多人点赞 2020-03-02 12:10:20
    C语言函数传递方式 值传递 定义 所谓的值传递,顾名思义就是使用变量、常量、数组等作为函数的参数。 地址传递

    C语言函数传递方式

    值传递

    定义

    • 所谓的值传递,顾名思义就是使用变量、常量、数组等作为函数的参数。实际是将实参的值复制到形参相应的存储单元中,即形参和实参分别占用不同的存储单元。

    特点

    • 值传递的特点是单向传递,即主调函数被调用时给形参分配存储单元,把实参的值传递给形参,在调用结束后,形参的存储单元被释放,而形参值的任何变化都不会影响到实参的值,实参的存储单元仍保留并维持数值不变。

    示意图

    值传递示意图
    其实值传递过程中由隐含的一步,如下代码所示:

    	int x = a;
    	int y = b; 
    

    所以swap1函数交换的是x和y,而原来的a和b从未改变。

    代码演示

    void swap1(int x,int y)
    {
    	int temp;
    	temp = x;
    	x = y;
    	y = temp;
    	printf("x = %d,y = %d\n",x,y);	
    }
    int main(int argc, char *argv[]) 
    {
    	int a = 12,b = 24;
        swap1(a,b); // 值传递 
        printf("a = %d b = %d",a,b);
    }
    
    

    运行结果

    值传递运行结果


    地址传递

    说明

    • 大家都知道,在C语言中,数组名就代表数组的首地址。所谓的地址传递,指的就是函数的参数是数组名或者指针。传递的是数组的首地址或指针的值,而形参接收到的是地址,即指向实参的存储单元,形参和实参占用相同的存储单元,即形参和实参是相同的。

    特点

    • 形参并不存在存储空间,编译系统不为形参数组分配内存。因此在数组名或指针作函数参数时所进行的传送只是地址传送,形参在取得该地址之后,与实参共同拥有一段内存空间,形参的变化也就是实参的变化。

    示意图

    地址传递示意图
    注意:这里也有一个隐含动作,如下代码所示:

    	x = &a;
    	y = &b;
    

    分别将a的地址,b的地址赋值给x和y,这样swap2函数操作的数其实就是a和b。

    代码演示

    void swap2(int* x,int* y)
    {
    	int temp;
    	temp = *x;
    	*x = *y;
    	*y = temp;
    	printf("x = %d y = %d\n",*x,*y);
    }
    int main(int argc, char *argv[]) 
    {
    	int a = 12,b = 24;
    	swap2(&a,&b); //地址传递
    	printf("a = %d b = %d",a,b); 
    }
    

    运行结果

    地址传递运行结果
    以上就是C语言值传递和地址传递的区别了,相信大家应该很清楚了吧!

    展开全文
  • 首先,不要纠结于 Pass By Value Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中。更何况,要想知道Java到底是传值还是传引用,起码你要...

    首先,不要纠结于 Pass By Value 和 Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中。

    更何况,要想知道Java到底是传值还是传引用,起码你要先知道传值和传引用的准确含义吧?可是如果你已经知道了这两个名字的准确含义,那么你自己就能判断Java到底是传值还是传引用。

    这就好像用大学的名词来解释高中的题目,对于初学者根本没有任何意义。

    一:搞清楚 基本类型 和 引用类型的不同之处

    int num = 10;

    String str = "hello";

    <img src="https://pic2.zhimg.com/166032bc90958c21604110441ad03f45_b.jpg" data-rawwidth="728" data-rawheight="458" class="origin_image zh-lightbox-thumb" width="728" data-original="https://pic2.zhimg.com/166032bc90958c21604110441ad03f45_r.jpg">如图所示,num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。

    f49e186d482f3cda13340f716c79beaa.png

    如图所示,num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。

    二:搞清楚赋值运算符(=)的作用

    num = 20;

    str = "java";

    <img src="https://pic3.zhimg.com/287c0efbb179638cf4cf27cbfdf3e746_b.jpg" data-rawwidth="714" data-rawheight="572" class="origin_image zh-lightbox-thumb" width="714" data-original="https://pic3.zhimg.com/287c0efbb179638cf4cf27cbfdf3e746_r.jpg">对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。

    b90768d4044a19005b38165efbd7bf6b.png

    对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。

    对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。

    如上图所示,"hello" 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)

    三:调用方法时发生了什么?参数传递基本上就是赋值操作。

    第一个例子:基本类型

    void foo(int value) {

    value = 100;

    }

    foo(num); // num 没有被改变

    第二个例子:没有提供改变自身方法的引用类型

    void foo(String text) {

    text = "windows";

    }

    foo(str); // str 也没有被改变

    第三个例子:提供了改变自身方法的引用类型

    StringBuilder sb = new StringBuilder("iphone");

    void foo(StringBuilder builder) {

    builder.append("4");

    }

    foo(sb); // sb 被改变了,变成了"iphone4"。

    第四个例子:提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。

    StringBuilder sb = new StringBuilder("iphone");

    void foo(StringBuilder builder) {

    builder = new StringBuilder("ipad");

    }

    foo(sb); // sb 没有被改变,还是 "iphone"。

    重点理解为什么,第三个例子和第四个例子结果不同?

    下面是第三个例子的图解:

    <img src="https://pic4.zhimg.com/d8b82e07ea21375ca6b300f9162aa95f_b.jpg" data-rawwidth="772" data-rawheight="398" class="origin_image zh-lightbox-thumb" width="772" data-original="https://pic4.zhimg.com/d8b82e07ea21375ca6b300f9162aa95f_r.jpg">builder.append("4")之后

    e0d386d6e9d4f914e435ed750717b669.pngbuilder.append("4")之后

    <img src="https://pic4.zhimg.com/ff2ede9c6c55568d42425561f25a0fd7_b.jpg" data-rawwidth="696" data-rawheight="424" class="origin_image zh-lightbox-thumb" width="696" data-original="https://pic4.zhimg.com/ff2ede9c6c55568d42425561f25a0fd7_r.jpg">下面是第四个例子的图解:

    4361184c7a346c0a42b47ff8468e8f6b.png下面是第四个例子的图解:

    <img src="https://pic4.zhimg.com/d8b82e07ea21375ca6b300f9162aa95f_b.jpg" data-rawwidth="772" data-rawheight="398" class="origin_image zh-lightbox-thumb" width="772" data-original="https://pic4.zhimg.com/d8b82e07ea21375ca6b300f9162aa95f_r.jpg">

    e0d386d6e9d4f914e435ed750717b669.png

    builder = new StringBuilder("ipad"); 之后

    <img src="https://pic2.zhimg.com/46fa5f10cc135a3ca087dae35a5211bd_b.jpg" data-rawwidth="710" data-rawheight="438" class="origin_image zh-lightbox-thumb" width="710" data-original="https://pic2.zhimg.com/46fa5f10cc135a3ca087dae35a5211bd_r.jpg">

    8f7bb07aced91fd8cdad161dc7737dd8.png

    作者:Intopass

    链接:https://www.zhihu.com/question/31203609/answer/50992895

    来源:知乎

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    Java传递参数有两种方式:值传递和引用传递

    值传递是传递数据:如基本数据类型都是值传递

    引用传递是把形参和实参的指针指向了堆中的同一对象,对象的引用和数组的引用。

    实参,Java的基本数据类型,如int,double等在函数的参数传递时,传递的是副本。String也属于这一范畴。

    形参,而如果是对象,则传递的是引用。

    作者:fbysss

    msn:jameslastchina@hotmail.com

    blog:blog.csdn.net/fbysss

    声明:本文由fbysss原创,转载请注明出处

    关键字:Java 传值 传引用

    这是个老生常谈的问题了,引起过无数争论,但可以说一直没有一个令人满意的回答。

    有些人非要故弄玄虚,把传引用说成是栈里面放的是引用的值,说只有传值没有传引用,那看看这句经典名言吧:

    O'Reilly's Java in a Nutshell by David Flanagan (see Resources) puts it best: "Java manipulates objects 'by reference,' but it passes object references to methods 'by value.'"

    从这里也可以看到,David 也没那么生硬,不过是看你从哪个角度来认识这个问题,如果大家习惯c++的那种传参时的理解方式,为何不能这么比较呢?

    有人已经总结过:

    参见

    1、对象是按引用传递的

    2、Java 应用程序有且仅有的一种参数传递机制,即按值传递

    3、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本

    4、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本写的没错,但是文字太多,第二条就已经把人弄糊涂了,得仔细看完4条才清楚。而且对String类型的疑惑没有解决。

    这么简单的事情,何必这么绕呢?为啥没人跟c++过不去,偏要跟Java来劲?

    三句话总结一下:

    1.对象就是传引用

    2.原始类型就是传值

    3.String等immutable类型因为没有提供自身修改的函数,每次操作都是新生成一个对象,所以要特殊对待。可以认为是传值。

    其他参考文章:

    展开全文
  • C语言指针值传递和地址传递

    千次阅读 2020-07-05 21:08:32
    C语言传参分为值传传递和地址传递。C语言指针传参时,可以通过指针引用方式改变指针指向的值。改变变量,可以使用指针应用方式,改变地址,使用指针的指针引用方式。 C语言值传递: 形参是实参的拷贝,改变形参的...
  • 要知道什么是**值传递****地址传递**,首先要知道什么是**基本数据类型****引用类型**。 Java的基本数据类型就八种(除了这八种之外都是引用类型): ◆整型:byte(8位) short(16位) int(32位) long(64位); ...
  • 通俗的来说,值传递只是把变量的值当做参数传递进子函数中,无论函数体中如何改变参数值,主函数的变量值都不会改变。 而地址传递,是把变量的地址传入子函数中,子函数中对于参数的改变,是通过传入的地址参数去...
  • 交换两个变量a、b的 代码如下: #include<stdio.h> int main() { void swap1(int p1,int p2); void swap2(int *p1,int *p2); int *p1,*p2,a,b; p1=&a; p2=&b; printf("请输入a、b的:"); ...
  • C++ 值传递和地址传递和引用传递

    千次阅读 多人点赞 2020-02-19 17:50:24
    C++ 值传递和地址传递 在我们在函数间数据传递的时候会出现,在函数中数据处理的间而过理想的,但在主函数中数据并没有发生变化。具体详情如下: 在数据传递时,分为值传递和地址传递; 值传递:在函数调用时实参将...
  • import java.util.Scanner;//导入Scanner ... //值传递和地址传递 int[] arr = {4,5}; //地址传递 通过传递同一个地址操作的是同一数组 //值传递:传递的是简单数据类型 在栈当中进行交换 没有...
  • 指针的值传递和地址传递

    千次阅读 2016-11-04 16:28:28
    值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入, 不能传出。当函数内部需要修改参数,并且不希望这个改变影响...
  • Python 值传递地址传递总结

    千次阅读 2021-01-29 10:38:02
    首先我们复习一下什么叫做值传递,什么叫做地址传递 1.值传递 在实参向形参传递的过程中,传递的只是实参的值,而在函数体操作的时候,实际操作的并不是实参而是形参,所以,值传递不改变原变量值 2.地址传递 在实参...
  • C语言值传递地址传递

    千次阅读 2021-07-14 20:36:33
    一、C语言函数的值传递 二、C语言函数的地址传递 三、局部变量作为函数返回值 #include <stdio.h> char *fun(void) { static char buf[] = "helo world!";//这里有没有static会影响输出结果,加上static相当...
  • 大多数人都知道,使用值传递对形参的更改不会影响实参,但是地址传递和引用传递却会, 最经典的例子莫过于交换两个数字。 但是,为什么在使用值传递的时候,传递一个地址给行参依然没有影响到实参了,是因为改变只...
  • 值传递和引用传递(地址传递)的区别

    千次阅读 2019-08-07 10:38:05
    传递和引用传递(地址传递)的区别 也许大家对于被值传递和引用传递(看了些别人的博客也有人说只有值传递)弄得傻傻分不清楚,我个人之前也是这样过来的,自己也思考了一番,后来才弄清楚了,结合大多数人的想法...
  • C/C++按值传递和地址传递

    万次阅读 多人点赞 2018-04-06 19:41:11
    C/C++的按值传递和地址传递有明显不同,下面对他们作个区别:按值传递:在调用函数中将原函数的值拷贝一份过去被调用的函数,在被调用函数中对该值的修改不会影响原函数的值。按地址传递:在调用函数的时候将原...
  • 形参与实参&值传递和地址传递

    万次阅读 2017-06-23 16:40:27
    1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能...3、实参形参在数量上,类型上、顺序上应严格一致,否则就会
  • C语言:值传递 和地址传递 ----讲解透彻

    千次阅读 多人点赞 2014-10-19 17:23:06
    C语言地址传递和值传递简析 --------------------------------------------------------------------- 文档简介: 本文写作初衷是为了解决C语言初学者关于地址传递和值传递一直理解得不 ...
  • 浅谈C++值传递地址传递、引用传递

    千次阅读 多人点赞 2018-10-25 17:22:04
    浅谈C/C++值传递地址传递、引用传递共同的困惑什么是函数形式参数实体参数功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个...
  • C语言参数传递----值传递地址传递

    千次阅读 多人点赞 2017-09-15 23:32:58
    最近开始复(yu)习(xi)C语言,看到参数传递这里,又遇到了以前一直没有搞清楚的一个问题,我相信这个问题大家许多初学者也会遇到过,就是C语言函数的参数传递方式。...1)值传递 2)地址传递 3)数组作为函数参数
  • 1.C语言中实参形参之间是单向的值传递,只能由实参传给形参,反之不能。 2.被调用函数的形参只有函数被调用的时候才会临时分配存储单元,一旦调用结束占用的内存会被释放。   1.按值传递 实参a将值拷贝给形参a...
  • 上篇文章《c语言函数传参の结构体数组篇》提到了C语言的函数传参方式,百度了一一一大圈,有说两种的,也有说三种的,简直把我搞晕了,其中有争议的地方就是“引用传递”方式。我看好多写三种方式的都把源代码代码贴...
  • 值传递(pass by value)是指在调用函数时将实际参数 复制 一份传递到函数中,这样在函数中如果对 参数 进行修改,将不会影响到实际参数。传递对象往往为整型浮点型字符型等基本数据结构。 public class PassBy...
  • 值传递地址传递

    千次阅读 2016-07-11 21:29:40
    不同的是,值传递传递的内容是一个变量的值,得到这个值后,对这个值的修改不能改变原变量的值;而地址传递传递的是一个变量的地址,得到传递的地址值后,可以通过这个地址直接访问地址对应的那个变量,进而修改那个...
  • 结构体知识------值传递和址传递

    千次阅读 2020-07-07 18:00:54
    址传递:传递的是变量的地址,就是传递的是0x0001这个地址值传递:传递的变量的值,就是传递的是1这个值。
  • 值传递和引用传递的区别

    万次阅读 2018-08-29 21:26:52
    1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递。示例如下:   [java] view plaincopy public class TempTest {  private void test1(int a){  //做点事情  }  public ...
  • java的参数传递是值传递还是地址传递结论: 1、基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的 2、对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。 ...
  • 这个上次面试就问我指针和引用的区别,我就有点蒙圈了,因为对“引用”这个词确实不了解,然后面试官又问我知不知道值传递和地址传递,我差点拍案而起,心里想问我这个问题,是不是有点太简单了,然后回答的是:“...
  • 值传递地址传递和引用传递

    千次阅读 2018-08-10 15:50:28
    值传递 [plain] view plain copy void swap1(int x, int y) { int tmp=x; x=y; y=tmp; print(“x=%d, y=%d\n”, x, y); } void main() { int a=2,b=7; swap1(a,b) ; printf(“a=%d, b=%d\n...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,899,078
精华内容 759,631
关键字:

值传递和地址传递

友情链接: 2.rar