C/c++值传递和址传递有什么区别

  介绍

这篇文章主要为大家展示了“C/c++值传递和址传递有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C/c++值传递和址传递有什么区别”这篇文章吧。

C/c++的按值传递和按地址传递有明显不同,下面对他们作个区别:

按值传递:在调用函数中将原函数的值拷贝一份过去被调用的函数,在被调用函数中对该值的修改不会影响原函数的值。

按地址传递:在调用函数的时候将原函数的值所在的地址拷贝一份过去,被调用函数对这个地址所作的修改会影响原来的值。

概述:

首先我们要知道<强> " <代码>的地址”和“<代码>地址中的内容>

比方说定义

int  a =, 10;

<强>那么一个在内存中的地址是0 x1100,在这个地址中存储的数据是10

 C/c++值传递和址传递有什么区别

假设创建指针p,把一个的地址赋值给<代码> p> p> int  a =10;   int * p;   p=,,,//把一个的首地址赋值给p

 C/c++值传递和址传递有什么区别

简单点的理解就好比你去图书馆借的书,每本书都会有他的一个编号(<代码>地址> 地址对应的内容,
如果你用指针,得到的是这个书所对应的编号(<代码>地址> 如果你是变量赋值,值传递,那么就相当于复印了一遍这个书(<代码>地址对应的内容> 地址>

 C/c++值传递和址传递有什么区别

从命名来理解

所以我们就会发现:

值传递,或者变量赋值,修改变量的值,修改的是新的新的编号(<代码>地址> 地址>

也就是形参是实参内容的拷贝,并不是地址的拷贝,所以改变形参的值并不会影响实参的值

 C/c++值传递和址传递有什么区别

使用址传递,用指针修改变量的值,就是把原编号(<代码>地址>

声明声明:描述在其他地方创建的对象,并不分配内存。(可以出现在多个地方)

定义定义:产生一个新的对象,并分配内存。(只能出现一次)

值传递

新开辟一个内存空间,存储原来变量的值,修改变量修改的是新的内存空间中的值,所以,原始的参数不会被函数修改。

值传递的优点:通过值来传递的参数可以是数字,变量,表达式。原本参数的值不会被修改。

值传递的缺点:不能修改原参数的值。

# include  & lt; stdio.h>   ,   void  swap  (int  x,, int  y)   {   int 温度;   x=temp ;   y=x ;   时间=y 温度;//printf  (“x =, % d, y =, % d \ n",, x,, y);   }   ,   int  main (空白)   {   int  a =, 4, b =, 6;   printf (“交换前:\ n  a =, % d, b =, % d \ n",, a, b);   swap  (a, b);   printf (“交换后:\ n  a =, % d, b =, % d \ n",, a, b);   return  0;   }

输出:

 C/c++值传递和址传递有什么区别

址传递

址传递就是指针传递,形参实际是指向实参地址的指针,当对形参的进行操作时,就相当于对实参本身进行的操作,可以改变指针指向内容的值,但是不能改变指针本身的地址。

# include  & lt; stdio.h>   void  swap  (int  * x,, int  * y)   {   int  temp=* x;   * x=y *;   * y=temp;//printf (“x =, % d, y =, % d \ n",, * x,, * y);   }   ,   int 主要(空白)   {   int =4;   int  b=6;   ,,,printf(“交换前:\ n  a =, % d, b =, % d \ n",, a, b);   swap  (,,, b);,,//传递的是地址,   printf(“交换后:\ n  a =, % d, b =, % d \ n",, a, b);   return  0;   }

C/c++值传递和址传递有什么区别