问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

解释下 传值方式 和 传址方式

发布网友 发布时间:2022-03-25 19:38

我来回答

1个回答

热心网友 时间:2022-03-25 21:07

问str为什么没有变。然后将void GetMemory改成:

void GetMemory(char **p, int num)
{
*p=(char *)malloc(sizeof(char) * num);
}

str就变了。

问这是为什么?先来看看什么是传值,什么是传址。

传值方式:向函数传递参数时,先复制一份参数,然后才将复制品传给参数。函数中所有对参数的操作,就只是在使用复制品。不会对改变传递前的参数本身。

传址方式:将地址传送给函数,函数对该地址的内容操作,相当于对实参本身的操作。

在一个程序运行时,程序会专门为参数开辟一个内存空间,称为“栈”。栈所在内存空间位于内存的低地址区。当程序需要传递参数时,将一个个参数“压入”栈区内存的底部,然后,函数再从栈区一个个读出参数。

如果一个函数需要返回值,那么调用者首先需要在栈区留出一个大小正好可以存储返回值的内存空间,然后再执行参数的入栈操作。大都数编译器采用“从右到左的次序”将参数一个个压入。因此先将b压栈,再将a压栈。以下面这个程序为例。

//skk_Argument Passing.cpp

#include <iostream>
using namespace std;

int f(int a, int& b)
{
a++;
b++;
return 1;
}

int main()
{
int a=4;
int b=7;
int c(0);

c=f(a,b);
cout<<a<<" "<<b<<" "<<c<<endl;

return 0;
}

参数a是传值,参数b是传址。

很容易看出最后的结果是:
4 8 1

还有一种形式:

void swap (int *a, int *b);

我不太赞成用这种形式(虽然很多时候很有用),最好用

void swap (int &a, int &b);

这是因为使用前一种形式容易出现问题,例如在skk_Argument Passing.cpp加入以下这2个程序段:

void swap1(int *a, int *b)
{
int i;

i=*a;
*a=*b;
*b=i;
}

void swap2(int *a, int *b)
{
int *i;

i=a;
a=b;
b=i;

}

swap1可以起到交换a,b的作用。swap2就不行了。因为本质上来说它们仍然是值传递,只不过这个值是地址,它们都不能改变自己参数本身(指针a和指针b)。swap2完全是一个传值调用。swap1虽然不能改变参数,但是指针太危险了,它间接改变了指针指向int 。因此在这种情况下,我们声明成:

void swap3 (int &a, int &b);

这就告诉该函数有可能改变传递来的变量的值。但是最好在调用的时候在后面注释,因为调用的时候是看不出的,例如调用swap1的时候为swap1 (&a,&b)可以很好给读程序的人提示信息,告诉我们参数可能被修改。调用swap3的时候就是swap3(a,b),无法给出信息,所以最好给注释。即便这样,我仍然偏爱swap3的写法。不过对非const引用参数是不允许做类型转换的,如果可以,那么这样做会毫无意义。因为类型转换的时候需要临时变量
传值和传址的区别是什么

1、在传值中函数参数压栈的是参数的副本,任何的修改是在副本上作用,没有作用在原来的变量上。2、传址中压栈的是指针变量的副本,当你对指针解指针操作时,其值是指向原来的那个变量,所以对原来变量操作。

传值和传址的区别

1、对实参的影响不同。传值是将实参的值传给形参后,实参与形参间便无任何联系,即形参的变化不会对实参产生任何影响。传值时,在形参前用ByVal来界定。传址是形参与对应实参用相同的内存地址,形参的改变将影响实参。2、对形参的影响不同。在传值中函数参数压栈的是参数的副本,任何的修改是在副本...

传值和传址的区别

传值:实际复制的是值,存在两个不同的、独立的拷贝;传址:复制的只是对值的引用。如果通过这个新的引用修改了值,则这个改变对最初的引用来说也可见。在《JavaScript高级程序设计》这本书中有这样一段话:有很多开发人员错误的认为:在局部作用域中修改的对象会在全局作用域中反映出来,就说明参数是...

在VB中,"传址"与"传值"到底有啥区别啊?最好举例子说明一下,谢谢啊!

"传址"是传变量的地址,这样可以在函数内引用这个变量 "传值"是传变量的值,相同于把这个变量复制给参数,在函数内不能引用原变量了。打比方,"传址"与"传值"就像身份证与身份证复印件的区别一样。

PHP传值,引用和传址的区别

--传地址:是传值的一种特殊方式,只是他传递的是地址,不是普通的如int那么传地址以后,实参和行参都指向同一个对象--传引用:真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值 即传址时只需在函数调用时在参数的前面加上"&amp;"号...

VB中传值参数(byval)和传址参数(byref)有什么区别,求解,谢谢

而按址传递是把这个变量的内存地址(&amp;H11003A10)作为参数传递给函数或过程,那么函数或过程对这个参数进行修改实际上就是对原变量的内存地址进行操作,也就是说原变量的值会相应改变的!通俗来说,传值就是你从存折里取出100元给别人,传址就是你直接把存折和密码给别人,让他自己去取!

在vb中传递参数的方法有几种?分别是?

2种,传值和传址,下面简单介绍一下。byref:缺省方式,按地址传,例如函数A调用函数B,按地址传递变量c作为参数,传递后如B在执行过程中改变c的值,则A中c的值也将改变为B执行后c的值。byval:按值传。例如函数A调用函数B,按值传递变量c作为参数,传递后不管B在执行过程中是否改变c的值,A中c的...

excel的四种参数传递有什么区别?

传值与传址的区别在于,如果在函数体中改变了参数的值,对于传值方式,在主程序(调用该函数处的程序)中是没有影响的,而传址方式会把主程序中相关的变量值改变,可以根据你的需要而定。VB默认是传址方式。调用函数可以是系统的,也可以是自己编写的,一般不需要声明(API 函数除外)。

javascript函数的传值与传址

答:变量存储在内存中,函数调用变量是获取变量在内存中的地址进行调用的,传址方式是函数直接对变量所在的内存地址进行操作,变量内保存的内容被函数修改,传址的方式是函数临时创建一个变量用来保存变量的值,函数操作的是临时变量的地址,这样就原变量中保存的内容不会被函数修改的.2.为什么在JAVASCRIPT声明变量...

VB中关于传值和传地址的问题?

本题可以这样理解:a和b是传值,也就是把x和y的值分别复制到a和b中,然后进行计算;c是传地址,也就是把z命名一个别称叫c,对c的任何改变都会体现到z中,就像一个人有学名有小名,但都是指同一个人。因此,z=c=a+b=5+7=12

传值方式和传地址方式 传值和传址 传值调用和传址调用的例题 vb中什么是传值和传值 java传值和传址的区别 vb传值和传址的例题 传值调用和传值调用的区别 ajax传值八个传值方法 传值的方式
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
第一ppt模板网官网 努比亚布拉格s可以充公交卡的nfc功能吗 康佳电视机死机了,要怎么处理呢? SuperPiCPU性能检测工具V12绿色汉化版SuperPiCPU性能检测工具V12绿色汉 ... 事故车鉴定的方法是什么? 请问大佬有飞儿云CPU限速工具 V1.0 官方版软件百度云资源吗_百度... 怎么才能鉴定是事故车 我现在上网打开网页特别慢,有人说让我看看任务管理器CPU的占有率... ...CPU监视工具) V8.70.6 英文版软件免费百度云资源吗 微信里收藏的语音可以转入wps里吗 VB中传值和传地址有什么区别 VB参数参数传递中,传值与传址的区别 什么是传值,什么是传址(引用)?对此,C&#47;C++与Java中的函数(方法)有什么不同? Java参数传递中的传值和传址的区别 C语言中传值与传址有什么区别 C 语言传址调用和传值调用有什么区别 C语言中传值和传址的区别 VB传值和传址的区别~~~ 参数传递的“传值”和“传址”有什么区别 传值和传址的区别 iPhone xs 和 iPhone xs max 到底有什么区别 苹果xs max256g多少钱 港版iPhone xs Max和美版无锁iPhone xs Max那个好? 买苹果xs好还是买xs max好? 苹果哪款有双卡双待? iPhone xsMax美版无锁港版双卡那个好啊? 别人拿苹果12mini,256g换我的苹果xs max256g,你们觉得哪个好? 有谁懂苹果手机xs mas 苹果xsmax256的型号? iphone xs max国行版64G市场售价多少?支持双卡吗? C语言传值和传地址的区别! PHP传值和传引用,传地址的区别 VB中数据传递的传值和传址的区别 C语言中传值和传地址有什么差别,怎么用的 传值和传引用,传地址的区别是什么 在VB中传值调用和传址调用的区别????? python关于函数的传值和传址到底是怎么回事 C++关于函数的传值和传地址传引用的区别? 华为p10能支持40w快充吗? 华为p10支持快充吗 华为 P10有快充技术吗? 华为p10快充是多少w? 华为p10能不能66W超级快充? 华为p10有快速充电吗 华为P10是快速充电吗 华为p10能用快充吗 华为p10有超级快充吗 华为p10有快充的功能吗 华为p10可以快冲吗 华为手机P10支持快充吗