关闭

如何证明C语言函数参数的转递是单值传递

标签: 语言cfun
2456人阅读 评论(1) 收藏 举报
分类:

                                                                               朱金灿

C语言函数使用中函数参数的传递是单值转递,即把实参传递给形参,就是把实参复制一份传给形参。如何证明这一点呢?我想到了一个方法,就是在调用函数和被调用函数都输出实参和形参的地址。如果地址一致那么就是双向传递,如果地址不一致,就是单向传递。

例程如下:

#include <iostream.h>

 

void Fun(int a,int b)

{

       cout<<&a<<endl;

       cout<<&b<<endl;

}

 

int main(void)

{

    int a;

    int b;

       cout<<&a<<endl;

       cout<<&b<<endl;

       Fun(a,b);

       return 0;

}

 

 

运行结果如下图:

现在我们可以清楚地看到,实参和形参的地址不一样。也就是说当传值进去时,它们的值是一样的,但它们的地址不一样,因此一旦改变形参的值,实参就不能相应地改变。这样我们也可以更好地理解为什么传指针进去可以改变实参的值。其实道理是一样的。传指针进去,我们一般不去直接改变指针的值,而是去改变指针所指的值,这样实际上就是形参和实参的地址是一样的,改变了形参,实参也作相应的变动。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

C语言函数的参数及传递方式

1.形式参数和实际参数 1.1形式参数 形参出现在被调函数当中,在整个函数体内都可以使用。形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存单元。调用结束内存单元被释放,故形参只有在...
  • qq_30351805
  • qq_30351805
  • 2016-05-08 10:37
  • 6028

C语言函数参数传递的分析

一、值传递和指针传递的概念 (一)值传递 值传递,即按值传递参数,按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的...
  • gatieme
  • gatieme
  • 2013-12-29 20:16
  • 22428

C中实参与形参的“值传递”只能“单向传送”(透彻的理解)

今天又彻底地把
  • sdkhy0808
  • sdkhy0808
  • 2014-07-25 17:54
  • 2733

c语言学习--关于函数的参数传递(汇编和可执行文件)

簇: 数据存储在硬盘的时候都是以簇位单位,所以无论文件大小是多少,除非正好是簇大小的倍数,否则文件所占用的最后一个簇或多或少都会产生一些剩余的空间,且这些空间又不能给其它文件使用,即使这个文件只有0字...
  • v_link
  • v_link
  • 2016-09-02 23:45
  • 849

菜鸟学习-C语言函数参数传递详解-结构体与数组

C语言中结构体作为函数参数,有两种方式:传值和传址。 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数。在这种情...
  • Paul_C_V
  • Paul_C_V
  • 2015-07-14 10:24
  • 2005

C语言函数传递指针参数的问题

一个问题是,当我们想用一个指针作为形参以此来对指针所指的对象进行一些操作的时候,我们应该怎么做?这种问题其实是很常见的一个问题,比如在结构体或者结构体数组中,直接传递一个结构体数组相比于传递一个指向结...
  • gl486546
  • gl486546
  • 2016-11-28 12:14
  • 8128

C语言之传递可变参数

C语言之传递可变参数文章链接:知识点 传递int可变参数个数; 传递char类型可变参数个数; 传递logn类型可变参数个数; 传递可变参数个数特例; 新名词记录{stdarg.h, va_list,...
  • qq_16628781
  • qq_16628781
  • 2017-05-24 22:18
  • 296

C语言函数传递与值传递

C语言提供了两种参数传值机制:一种是值传递,就是将实参的值赋值给形参,换句话说,形参是实参的一份拷贝,因此函数对形参的改变并不影响实参;另一种是参数传递,是一种地址传递,是指将实参的地址赋值给形参,即...
  • u013514928
  • u013514928
  • 2016-01-25 11:53
  • 451

[C]C语言中函数参数传递的三种方式(x,*x,&x)

先看三种方式实现函数中参数传递的实例程序 * 输入描述:两个待交换的整数 * 程序输出:交换后得两个整数#include void myswap(int x, int y) { int ...
  • mjl960108
  • mjl960108
  • 2016-12-10 16:06
  • 1532

C语言有参函数调用时参数间数据传递问题

C语言中在发生有参函数调用时,实参变量与形参变量之间的数据都是单向的“值传递”方式。包括指针变量和数组名作参数的情况。 C语言要求函数的实参要有确定的值,在函数调用时给形参分配相应的内存单元,同...
  • shan1991fei
  • shan1991fei
  • 2016-05-02 13:43
  • 5081
    个人资料
    • 访问:4070704次
    • 积分:46263
    • 等级:
    • 排名:第76名
    • 原创:772篇
    • 转载:80篇
    • 译文:3篇
    • 评论:2476条
    公告


    真名:朱金灿
    主要经历:本科毕业于CUG(武汉)的GIS专业,毕业后参加工作,现在在北京从事软件开发和团队管理工作。曾获有色金属工业科技进步奖二等奖(获奖证书链接)。
    我的联系方式:
    EMAIL:clever101#163.com
    研究方向:
    数字图像处理、计算机图形学。

    本博客内容除非特殊说明均属原创,如需转载、引用其中的部分文字,请注意以下几点:

    1)如果我的博客侵犯了你的版权,请给我邮件:clever101#163.com,经核实后我会做出合适的处理。

    2)请在转载(引用)的内容提供本博客中相应文章的链接。如你的作品为非电子读物或纯文本,请给出链接的url。

    3)请勿将我的原创文章用于商业用途。

    4)如果愿意,请给我邮件:clever101#163.com,让我知道我的东西到哪去了。谢谢!

    5)我可以尽我所能回复你在评论中提到的问题,但一般不会给你发邮件,所以请勿留邮箱地址.

    文章存档
    最新评论