黑马程序员技术交流社区

标题: 形参和实参!!! [打印本页]

作者: wang619590713    时间: 2015-4-14 22:21
标题: 形参和实参!!!
希望路过的大神帮忙解释一下形参和实参的区别!总是有些不明白!谢谢了!

作者: sunyang    时间: 2015-4-14 22:40
在定义函数时,函数名后面的()中定义的变量称为形式参数(形参);在调用函数时传入的值称为实际参数(实参)。


// b是test函数的形参(形式参数)
void test(int b)
{
    b = 9; // 改变了形参b的值
}

int main()
{
    int a = 10;
    printf("函数调用前的a:%d\n", a);
   
    test(a); // a是test函数的实参(实际参数)

    printf("函数调用后的a:%d", a);
    return 0;
}

如果是基本数据类型作为函数的形参,那是简单的值传递,将实参a的值赋值给了形参b,相当于

int a = 10;
int b = a;
b = 9;
a和b是分别有着不同内存地址的2个变量,因此改变了形参b的值,并不会影响实参a的值。
作者: 强颜欢笑i    时间: 2015-4-14 22:40
#include <stdio.h>
void swap(int *a,int *b)
{
  int *t;
  t=a;a=b;b=t;
}
main()
{
  int i=3,j=5,*p=&i,*q=&j;
  swap(p,q);printf("%d %d\n",*p,*q);
}
void swap(int *a,int *b) 中的a、b是形参,swap(p,q)中的p、q是实参。
至于为什么“参数可以由实参传向形参,而不能逆反传递”,你可以这样理解:
我们不妨把函数比作戏剧的剧本,把形参比做剧本中的人物;当我们要表演此戏剧的时候,我们肯定会让真实的演员(实参)去扮演(替换)剧本里的角色(形参),而绝不可能用剧中人去替代现实的演员!理解了上面的道理,你还会有问题吗?
作者: Errors    时间: 2015-4-14 22:41
形参实在函数定义和声明时使用的参数,实参是调用函数时传入函数内部的参数,传入函数的的实参要与函数的形参保持匹配,先可以这么理解就是,函数调用时用实参替换形参的位置。
作者: 蓝鸟    时间: 2015-4-14 22:54
数组做形参时,转的是指针,8个字节




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2