c语言值传递
Ⅰ c语言值传递和地址传递 不明白
1)void swap(int a, int b)的参数属于值传递;
2)值传递需要一个中间变量,以你的程序为例:
swap(x,y);
它的实际过程是,先分配两个临时变量,a和b,这两个变量和传入的x、y占用不同的地址空间,程序先将x和y的值复制给a和b:
swap(a = x, b = y),之后在swap中所有的操作都是针对a和b进行的,与x和y无关,所以x和y的值在swap执行后依然保持不变。
3)地址传递也需要一个中间变量,但是这个中间变量保存的是地址,对于C语言你就需要用到指针变量,它可以保存一个普通变量的地址,通过改变这个地址里的内容就可以改变原变量的值。对于你的程序,如果想在调用swap后,x和y的值被改变,你需要定义成下面的样子:
#include <stdio.h>
void swap(int *,int *);//参数里的*号表示指针
void main()
{
int x=10,y=20;
printf("(1)a=%d y=%d
",x,y);
swap(&x,&y);//x和y按地址传入
printf("(4)x=%d y=%d
",x,y);//按地址传入,x和y的值被swap改变
}
void swap(int *pa, int *pb)//函数形参变成指针
{
int t;
printf("(2)a=%d b=%d
",*pa,*pb); //访问指针的内容需要在指针前加*号
t=*pa;
*pa=*pb;
*pb=t;
printf("(3)a=%d b=%d
",*pa,*pb);
}
}
3)关于指针的详细内容,由于篇幅有限,请参看C语言资料的相关章节。
Ⅱ C语言:哪些是值传递哪些是地址传递
C语言没有真正意义的地址传递,即使传递指针也只是传递的指针的值,
比如这里加入b 的地址是0x ffff;
实际上在point 函数内是产生了另一个名为p的指针, p 指向0x ffff ( 这个p 只是和main函数的p值相同而已,不是同一个。所以传递指针其实是传递的地址的值,还是值传递)
因此p + 3 不会影响main 函数的p, 如果要改变main的p, 必须:
Point(char** p)
{
*p += 3;
}
调用:
*p = b;
Point(&p);
总之,改变指针的值用二级指针(更高一级的指针,即该指针的地址)。
Ⅲ c语言函数的值传递
p函数就是个冒泡递减排序功能。标准函数头写法应该是void p(int a[])而不是void p(int a[5]),即使写成void p(int a[5]),编译器也是按void p(int a[])解释而不按void p(int a[5])解释,而且这里a[]的意思就是定义a是int *型指针。函数p中并没有改变a,改变的是a指向的目标a[0]~a[4]。所以不知你问的具体是啥意思……
Ⅳ 谁解释C语言中什么是值传递和地址传递
本质上都是值传递,因为传递的都是数值,地址也是用数值表示的。如果从作用上分类,值传递传送的是内存单元中存放的数据,这个数据是接收方要直接使用的,地址传递传送的是内存单元的地址(其实这个地址也是存放在某个内存单元中的),这个数据是给接收方间接使用的,因为它指向另一个内存单元,而这个被指向单元里的数据才是最终需要的。比方一下你就明白了:有两个抽屉AB,A和B中都有你要的东西,但抽屉在我这里,我把A里面的东西直接给你就是值传递,我把B的钥匙给你就是地址传递。
Ⅳ C语言中,数组做函数参数如何才能按值传递
传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。
void func(int array[10])
void func(int array[])
void func(int *array)
所以以上三种函数声明完全等同。
实际情况是,数组做参数,完全无法按值传递。这是由C/C++函数的实现机制决定的。
下一个问题是:为什么偏要按值传递呢?当要在一个函数内使用一个数组时,传一个指针进去不就行了?只要能访问到我们所要的数据并对其进行操作,何苦钻牛角尖。
Ⅵ C语言如何把一个函数的返回值传递给另一个函数
1、多文件之间,一般很少有单个参数传递,那个交集太大,不容易移植,各个文件之间最好是越独立越好。
2、数据传递,一般是通过函数接口来实现的。就是用另一个C文件中的某一个功能的时候,可以通过include它的头文件,然后直接调用它的接口函数,这样目的就达到了,这样实现的好处就是易于移植。
Ⅶ c语言中的值传递是怎么回事
实参的值传给了形参,形参可以看着是被调函数中的局部变量被调函数可有返回值也可以没有有返回值用return返回。例如int fun(int a,int b){ int c; c=a+b; return c;}主函数调用:int a,b,c;a=1,b=2;c=fun(a,b);没有返回值的函数通常形参都是指针变量,那样可以直接改变变量的值,例如fun(int *a){ *a=5;}主函数调用int b=1;fun(&b);这里调用fun后,b的值就变为5了而如果你的函数是fun(int a)这样b的值是不会变化的,这要你去理解指针
Ⅷ 在C语言中,函数实参与形参之间的数据传递方式是( )传递方式。
函数实参与形参之间的数据传递方式是( 值传递)传递方式,在C语言中,数据传递方式有值传递和引用传递,值传递:传值,实际是把实参的值赋值给行参,相当于。
那么对行参的修改,不会影响实参的值 。引用传递: 实际是传值的一种特殊方式,只是他传递的是地址,不是普通的赋值,那么传地址以后,实参和行参都指向同一个对象,因此对形参的修改会影响到实参。
(8)c语言值传递扩展阅读
传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。
引用传递是将变量的内存地址传递给方法,方法操作变量时会找到保存在该地址的变量,对其进行操作。会对原变量造成影响。可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。
Ⅸ C语言中参数传递有什么特点
C语言中参数传递 分类及特点:
1、值传递: 在函数调用时,发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
2、地址传递:可以实现地址互换。
3、引用传递:与地址传递一样,可以实现地址互换,但该传递仅适用于C++语言。
Ⅹ c语言函数调用时,参数是如何传递的
建立中间变量(形参),把实参值赋值给中间变量,当被调函数返回值时,系统释放掉中间变量。
在程序中通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似。对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。
(10)c语言值传递扩展阅读:
C语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。
1、如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。例8.2的主函数中未对函数s作说明而直接调用即属此种情形。
2、当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。例如例8.1中,函数max的定义放在main 函数之前,因此可在main函数中省去对max函数的函数说明int max(int a,int b)。
3、如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。