您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 值传 >

c语言单项值传递比较求大神在线等!

发布时间:2019-07-02 05:17 来源:未知 编辑:admin

  的区别在什么地方,什么时候是单向值传递,什么时候是地址要改变,造成实参值也要变,这类问题一直不是很清楚,求大神解答,在线等,回答好可以加分。

  我来答可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部给你几条C语言中的现实说法:一、参数传递实际上全是传值,地址也是数值二、究竟传递的是地址还是数值,可以从函数调用那里的实参类型情况为区分如:int i=3,j=5,*p=&i,*q=r=f(p,q); //p q 是指针变量,这说明传递到子函数f()中的是地址,当然函数声明int *f(int *s,int *t) 也明确指出了 形参s t都是int类型指针,实参类型要与形参相匹配才是正确的调用!

  r=f(&i, //这样写是正确的,与r=f(p,q); 是相同的,传递的分别是i j的地址,&符号是取地址操作符。

  如果传递的参数是数值,如有如下函数:f1(int i, int,j); 这样,无论在子函数中的形参(i,j)如何变化都不会改变实参的数据。

  如果传递的参数是地址,如你的例子int *f(int *s,int *t),如果变化的是 s t本身,而不是通过*s *t进行操作,则不会改变实参。 *符号表示引用地址中的数据,这样的代码是指对地址中的数据进行操作,会改变实参对应的数据。

  int k; //这里定义一个整型变量,用来做下面的数据交换的临时变量,是正确的用法!

  int *k; //这里定义的是一个指针变量,而下面的代码用它来存储s地址中的整数,用错误的用法!

  //但,因为地址也是整数,所以k作为指针变量,也可以存储整数,所以,你的代码也能正确运行出结果

  int *k; //这里定义的是一个指针变量,作为中间变量,存储地址交换的临时变量

  if(*s*t) {k=s ; s=t; t=k;} //这里交换的是两个指针的位置,但原地址中存放的数据没有改变,s指向了地址中数据较大的一个。即:实参数据没有变化,只是通过这里实现了指针指向的变化(区别)

  return s; //这时返回指向较大的一个数据的地址,也能得到你想要的结果

  综上,可以看出,两个代码的区别在于,是否对指针(地址)中的数据进行了改变!

  意思是一个指针指向没变,但通过指针改变了数值,另一个是指针指向改变,但仅仅是改变了指针指向,但没有改变数值?

  前一个是传址的(双向传递),后一个存在错误,如果将if(*s*t) {k=*s ; *s=*t; *t=k;}改为if(*s*t) {k=s ; s=t; t=k;} 则是传值的(单向传递)。

  我打错了,应该是你的那种,关键是怎么看出来哪个是传地址,哪个是单向传递?

  是这样的,对于参数为指针类型的函数,是传址还是传值,主要看函数体中如何操作,如果是对指针所指单元操作(如前一种情况:k=*s ; *s=*t; *t=k;),则是传址的;如果是对指针的操作(如后一种情况:k=s ; s=t; t=k;),则是传值的。

http://abetterapp.com/zhichuan/190.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有