精华内容
下载资源
问答
  • C语言参数传递

    2020-04-30 21:17:02
    c语言传递普通参数时,函数不改变其值,而将数组作为参数时,函数就能改变其值。 原因:当我们调用某个函数的时候,调用参数的值被拷贝到形式参数中,无论对于数组还是普通变量,这个原则都是正确的,但是对于数组来...

    c语言传递普通参数时,函数不改变其值,而将数组作为参数时,函数就能改变其值。
    原因:当我们调用某个函数的时候,调用参数的值被拷贝到形式参数中,无论对于数组还是普通变量,这个原则都是正确的,但是对于数组来说,我们并不是把实际的整个数组拷到形式参数的数组中,而是把实际数组的内存位置拷贝到形式参数中,因此,在函数中对形式参数所代表的数组中元素所进行的操作,实际上是对实际参数所代表的数组进行的操作,而不是对数组的副本进行的操作。

    #include<stdio.h>
    void multiplyby2(float array[], int n)
    {
    	int i;
    	for (i = 0; i < n; i++)
    		array[i] = array[i] * 2;
    }
    
    int main(void)
    {
    	int i;
    	float floatvals[4] = { 1.2f,-3.7f,6.2f,8.55f };
    	void multiplyby2(float aray[], int n);
    	multiplyby2(floatvals, 4);
    		for (i = 0; i < 4; i++)
    			printf("%.1f  ", floatvals[i]);
    		return 0;
    
    
    
    
    
    }
    

    本例取自课本

    展开全文
  • C语言中函数参数传递的三种方式 (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。 (2)传址,就是传变量的...

    C语言中函数参数传递的三种方式

    (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。
    (2)传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。
    (3)传引用,实际是通过指针来实现的,能达到使用的效果如传址,可是使用方式如传值。
    说几点建议:如果传值的话,会生成新的对象,花费时间和空间,而在退出函数的时候,又会销毁该对象,花费时间和空间。
    因而如果int,char等固有类型,而是你自己定义的类或结构等,都建议传指针或引用,因为他们不会创建新的对象。

    例1:下面这段代码的输出结果为:

    //引用交换
    void swip(int &a, int &b)
    {
    	int temp = a;
    	a = b;
    	b = temp;
    }
    //值传递
    void swip1(int a, int b)
    {
    	int temp = a;
    	a = b;
    	b = temp;
    	cout << "swip1 a = " << a << "swip1 b = " << b << endl;
    }
    //地址传递值传递
    void swip2(int *a, int *b)
    {
    	int temp = *a;
    	*a = *b;
    	*b = temp;
    }
    int main()
    {
    	int a = 10, b = 20;
    	swip1(a, b);
    	cout << "a = " << a << "b = " << b <<endl;
    	system("pause");
    	return 0;
    }
    

    解析:
    该题考察函数传参问题。
    1,指针传参 -> 将变量的地址直接传入函数,函数中可以对其值进行修改。
    2,引用传参 -> 将变量的引用传入函数,效果和指针相同,同样函数中可以对其值进行修改。
    3,值传参 -> 在传参过程中,首先将c的值复制给函数c变量,然后在函数中修改的即是函数的c变量,然后函数返回时,系统自动释放变量c。而对main函数的c没有影响。

    转载:https://blog.csdn.net/weibo1230123/article/details/75541862

    展开全文
  • C语言中函数传递的三种传递形式:值传递,地址传递,引用传递。引用传递在C++的学习会有体会。 函数参数传递方式之一:值传递  1. 值传递的一个错误认识 voidExchg1(int x, int y) //定义中的x,y变量被称为...

    C语言中函数传递的三种传递形式:值传递,地址传递,引用传递。引用传递在C++的学习会有体会。

    函数参数传递方式之一:值传递 

    1. 值传递的一个错误认识

    voidExchg1(int x, int y)   //定义中的x,y变量被称为Exchg1函数的形式参数

    {

     int tmp;

     tmp=x;

     x=y;

     y=tmp;

     printf(“x=%d,y=%d/n”,x,y)

    }

    问:你认为这个函数是在做什么呀?

    答:好像是对参数x,y的值对调吧?

       请往下看,我想利用这个函数来完成对a,b两个变量值的对调,程序如下:

    voidmain()

    {

     int a=4,b=6;

     Exchg1 (a,b)     //a,b变量为Exchg1函数的实际参数。

    / printf(“a=%d,b=%d/n”,a,b)

    }

        Exchg1()里头的  printf(“x=%d,y=%d/n”,x,y)语句会输出什么啊?

       Exchg1()后的  printf(“a=%d,b=%d/n”,a,b)语句输出的是什么?

       程序输出的结果是:

    x=6, y=4 

    a=4, b=6  //为什么不是a=6,b=4呢?

     

     明明 把a,b分别代入了x,y中,并在函数里完成了两个变量值的交换,为什么a,b变量值还是没有交换(仍然是a==4,b==6,而不是a==6,b==4)?如果你也会有这个疑问,那是因为你跟本就不知实参a,b与形参x,y的关系了。

     

    2. 一个预备的常识

    为了说明这个问题,我先给出一个代码:

    inta=4;

    intx;

    x=a;

    x=x+3;

       看好了没,现在我问你:最终a值是多少,x值是多少?

       (怎么搞的,给我这个小儿科的问题。还不简单,不就是a==4  x==7嘛!)

       在这个代码中,你要明白一个东西:虽然a值赋给了x,但是a变量并不是x变量哦。我们对x任何的修改,都不会改变a变量。呵呵!虽然简单,并且一看就理所当然,不过可是一个很重要的认识喔。

     

    3. 理解值传递的形式

    看调用Exch1函数的代码:

     

    main()

    {

     int a=4,b=6;

     Exchg1(a,b) //这里调用了Exchg1函数       

     printf(“a=%d,b=%d”,a,b)

    Exchg1(a,b)时所完成的操作代码如下所示。

    intx=a;//←

    inty=b;//←注意这里,头两行是调用函数时的隐含操作

    inttmp;

    tmp=x;

    x=y;

    y=tmp;

       请注意在调用执行Exchg1函数的操作中我人为地加上了头两句:

    intx=a;

    inty=b;

       这是调用函数时的两个隐含动作。它确实存在,现在我只不过把它显式地写了出来而已。问题一下就清晰起来啦。(看到这里,现在你认为函数里面交换操作的是a,b变量或者只是x,y变量呢?)

       原来 ,其实函数在调用时是隐含地把实参a,b 的值分别赋值给了x,y,之后在你写的Exchg1函数体内再也没有对a,b进行任何的操作了。交换的只是x,y变量。并不是a,b。当然a,b的值没有改变啦!函数只是把a,b的值通过赋值传递给了x,y,函数里头操作的只是x,y的值并不是a,b的值。这就是所谓的参数的值传递了。

       哈哈,终于明白了,正是因为它隐含了那两个的赋值操作,才让我们产生了前述的迷惑(以为a,b已经代替了x,y,对x,y的操作就是对a,b的操作了,这是一个错误的观点啊!)。

     

    三. 函数参数传递方式之二:地址传递

    继续——地址传递的问题!

    看题二的代码:

    Exchg2(int*px, int *py)

    {

     int tmp=*px;

     *px=*py;

     *py=tmp;

     print(“*px=%d,*py=%d/n”,*px,*py);

    }

    main()

    {

     int a=4;

     int b=6;

         Exchg2(&a,&b);

         Print(“a=%d,b=%d/n”, a, b);

    }

    它的输出结果是:

     *px=6,*py=4

     a=6,b=4

     

       看函数的接口部分:Exchg2(int*px,int *py),请注意:参数px,py都是指针。

       再看调用处:Exchg2(&a,&b);

       它将a的地址(&a)代入到px,b的地址(&b)代入到py。同上面的值传递一样,函数调用时作了两个隐含的操作:将&a,&b的值赋值给了px,py。

    px=&a;

    py=&b;

       呵呵!我们发现,其实它与值传递并没有什么不同,只不过这里是将a,b的地址值传递给了px,py,而不是传递的a,b的内容,而(请好好地在比较比较啦)

       整个Exchg2函数调用是如下执行的:

     px=&a;   //

     py=&b;   //请注意这两行,它是调用Exchg2的隐含动作。

     int tmp=*px;

     *px=*py;

     *py=tmp;

     print(“*px=%d,*py=%d/n”,*px,*py);

       这样,有了头两行的隐含赋值操作。我们现在已经可以看出,指针px,py的值已经分别是a,b变量的地址值了。接下来,对*px,*py的操作当然也就是对a,b变量本身的操作了。所以函数里头的交换就是对a,b值的交换了,这就是所谓的地址传递(传递a,b的地址给了px,py),你现在明白了吗?

     

    四. 函数参数传递方式之三:引用传递

       看题三的代码:

    Exchg3(int&x, int &y) //注意定义处的形式参数的格式与值传递不同

    {

      int tmp=x;

      x=y;

      y=tmp;

     print(“x=%d,y=%d/n”,x,y);

    }

    main()

    {

     int a=4;

     int b=6;

         Exchg3(a,b);  //注意:这里调用方式与值传递一样

         Print(“a=%d,b=%d/n”, a, b);

    }

    输出结果:

    x=6,y=4

    a=6,b=4   //这个输出结果与值传递不同。

       看到没有,与值传递相比,代码格式上只有一处是不同的,即在定义处:

    Exchg3(int&x, int &y)。

       但是我们发现a与b的值发生了对调。这说明了Exchg3(a,b)里头修改的是a,b变量,而不只是修改x,y了。

       我们先看Exchg3函数的定义处Exchg3(int &x,int &y)。参数x,y是int的变量,调用时我们可以像值传递(如: Exchg1(a,b); )一样调用函数(如: Exchg3(a,b); )。但是x,y前都有一个取地址符号&。有了这个,调用Exchg3时函数会将a,b 分别代替了x,y了,我们称x,y分别引用了a,b变量。这样函数里头操作的其实就是实参a,b本身了,也就是说函数里是可以直接修改到a,b的值了。

     

      最后对值传递与引用传递作一个比较: 

    1. 在函数定义格式上有不同:

    值传递在定义处是:Exchg1(int x, int y);

    引用传递在这义处是:Exchg1(int &x, int &y); 

    2. 调用时有相同的格式:

    值传递:Exchg1(a,b);

    引用传递:Exchg3(a,b); 

    3. 功能上是不同的:

    值传递的函数里操作的不是a,b变量本身,只是将a,b值赋给了x,y函数里操作的只是x,y变量而不是a,b,显示a,b的值不会被Exchg1函数所修改。

    引用传递Exchg3(a,b)函数里是用a,b分别代替了x,y。函数里操作的是a,b。

     

    转载出处: http://blog.csdn.net/the_fire/archive/2009/06/13/4267058.aspx

    展开全文
  • C语言形式参数传递的两种方式

    千次阅读 2018-10-22 20:06:15
    C语言中实际参数(实参)与形式参数(形参)之间的传递方式有传值和传地址两种函数调用方式。 1.直接传值。 直接传值,在fun函数里面改变a,b的值,不会改变主函数里面a,b的值。 #include&lt;stdio.h&gt;...

    C语言中实际参数(实参)与形式参数(形参)之间的传递方式有传值和传地址两种函数调用方式。

    1.直接传值。

    直接传值,在fun函数里面改变a,b的值,不会改变主函数里面a,b的值。

    #include<stdio.h>
    void fun(int a, int b)  // 此处a, b为形参
    {
        a++;
        b++;
    }
    void mian()
    {
        int a=1, b=2;    
        fun(a, b);  // 按传值方式调用函数fun,此处a,b为实参
        printf("%d, %d\n", a, b);  // 输出a=1, b=2
    }

    2.传地址方式

    在fun函数里面改变a.b的值,主函数里面a,b的值也会改变。

    #include<stdio.h>
    void fun(int *a, int *b)  
    {
        *a =3;
        *b =4;
    }
    void main()
    {
        int a=1, b=2;    
        fun(&a, &b);  // 按传地址方式调用函数fun
        printf("%d, %d\n", a, b);  // 输出a=3, b=4
    }

     

    展开全文
  • 主要介绍了C语言中的参数传递机制,C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。下面我们详细探讨下
  • 关于C语言的函数传参,有时候由于数据量比较大,比如参数是一个结构体,我们会考虑用结构体指针来传参,以避免在函数调用时发生大量数据的拷贝。有两种形式,一种是用在参数列表里面,而当仅仅是获取某些数据时,...
  • C语言函数参数传递原理

    千次阅读 2014-07-29 10:34:19
    这次,我们只是详细描述一下第一种参数传递方式,另外一种方式在这里不做详细介绍。 首先,我们看一下,下面一个简单的调用例程: int Add (int a, int b, int c) { return a+b+c; } void main() { int x =0 , y =...
  • Text1:传值形式: 示例: c语言代码: #include<stdio.h> void swap1(int x, int y){ int m; m = x; x = y; y = m; printf("x=%d,y=%d\n", x, y); } int main(){ int a...
  • C语言中函数参数传递

    2019-06-15 15:16:00
    C语言中函数参数传递的三种方式 (1)值传递,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。(2)地址传递,就是把...
  • 传递,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值 引用传递,实际是通过指针来实现的,能达到使用的效果如传址,...
  • C语言函数的参数传递

    2015-03-17 09:14:50
    C语言函数的参数传递 1.调用函数向被调用函数以形式参数传递 用户编写的函数一般在对其说明和定义时就规定了形式参数类型 ,因此调用这些函数时参量必须与子函数中形式参数的数据类型、顺序和数量完全相同。注意: ...
  • 值传递和地址传递,C语言函数传参方式详解 ...在 C 语言中,函数的参数传递方式有两种:值传递与地址传递。下面分别介绍这两种传递形式。 值传递 这种方式使用变量、常量、数组元素作为函数参数,实际是将实参的值复...
  • void arryPrint(int arry[],int cnt)//设计函数传递数组时需要传递两个东西,一个是数组的首地址,一个是数组的个数 { int i; for(i=0;i<cnt;i++){ printf("%d ",arry[i]); } 在数组和函数的合体运用当中,...
  • 汇编向C语言参数传递的问题

    千次阅读 2018-12-08 23:57:38
    C语言与汇编语言混合编程应遵守的规则 ARM编程中使用的C语言是标准C语言,ARM的开发环境实际上就是嵌入了一个...否则要将汇编程序以文件的形式加入到项目中,按照ATPCS(ARM/Thumb过程调用标准,ARM/Thumb Procedure ...
  • C语言函数返回值与参数传递

    千次阅读 2019-10-26 11:57:43
    C语言函数返回值与参数传递 一:参数传递 C语言的函数中必不可少的就是参数传递,可以采用传值和传指针两种方式。 1.传值的形式:只是将参数值的拷贝传给函数,并非参数本体如: int test(int x,int y) { x=2*y; ...
  • c语言传递数组参数

    2020-04-29 22:50:27
    int minimum(int values[10])//首先构造一个函数,这个声明返回值是整型,并且形式参数是一个含有10个元素的数组 int main(void) { int scores[10], i, minScore; printf("enter 10 scores\n"); for (i = 0; i &...
  • C语言三种参数传递方式

    千次阅读 2015-11-12 15:55:23
    C语言中存在三种参数传递方式,分别是值传递,地址传递,引用传递;三种方式之间形式参数的区别到底是什么?三种方式在内存中的操作到底是什么样的? 本文通过几个例子来分析、总结。
  • C语言中函数参数传递的三种方式

    万次阅读 多人点赞 2017-07-22 21:09:40
    C语言中函数参数传递的三种方式(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。(2)传址,就是传变量的地址...
  • 不少同学在学到C语言的指针部分时感到很困惑,对经常提到的“值传递”和“地址传递”两个概念弄不 明白。实际上,因为地址本身也可以作为一个特殊的“值”,...若参数传递的是变量的地址,则视其为地址传递方式。...
  • 转自: 不少同学在学到C语言的指针部分时...我们在学习过程中可以视参数的形式而区别对待,比如若参数传递的是简单数据类型的数值,则将其归类为值传递方式;若参数传递的是变量的地址,则视其为地址传递方式。
  • 这次,我们只是详细描述一下第一种参数传递方式,另外一种方式在这里不做详细介绍。 首先,我们看一下,下面一个简单的调用例程: int Add (int a, int b, int c) { return a+b+c; } void ...
  • C语言中函数参数传递有:值传递、地址传递、引用传递这三种形式。 下面用这三种方式来实现两个变量值的对调。代码一为值传递,代码二为地址传递,代码三为引用传递。  示例代码一(该方法并不能实现两个变量值的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 802
精华内容 320
热门标签
关键字:

c语言参数传递形式

c语言 订阅