-
2021-10-13 16:24:11
如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;
而从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。
C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处。
形参的解释
在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。
关键词:占位符,没有数据
实参的解释
函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参
一、形参和实参的区别和联系
先在程序中看看形参和实参
#include <stdio.h> //计算从m加到n的值 int sum(int m, int n) { int i; for (i = m+1; i <= n; ++i) { m += i; } return m; } int main() { int a, b, total; printf("Input two numbers: "); scanf("%d %d", &a, &b); total = sum(a, b); printf("a=%d, b=%d\n", a, b); printf("total=%d\n", total); return 0; }
函数定义处的 m、n 是形参,函数调用处的 a、b 是实参。
1.1形参变量只有在函数内部有效,不能在函数外部使用。
1.2实参应提前用赋值、输入等办法使实参获得确定值。
1.3实参和形参在数量上、类型上、顺序上必须严格一致。
1.4在函数调用过程中,形参的值发生改变并不会影响实参。
参考总结链接:
更多相关内容 -
C语言中形参和实参详解及实例代码
2020-12-26 08:05:48函数的参数分为形参和实参两种。在本小节中,进一步介绍形参、实参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也... -
C语言形参和实参的区别(非常详细)
2021-05-19 07:38:41C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。形参(形式参数)在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据...如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。
这一节我们先来讲解C语言函数的参数,下一节再讲解C语言函数的返回值。
C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。
形参(形式参数)
在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。
这里按自己的理解为什么说形参看作一个占位符,后文还说到在调用之前并没有给他分配内存,看上去这两段是有些矛盾的,其实机器在时间上的运行顺序这么说没毛病;
本人理解是在程序编译过程中,程序计数器不断加以程序顺序执行,执行到调用函数位置时,会将之前的数据压栈就像中断一样,调用前要传递实参值对应的内存位置并没有开辟,所以可以说形参再调用前不占内存;
但是这里没有开辟不是说实参会传到随机的位置,这是不会发生的,程序在编译好之后,每执行一条指令,数据都会有个确切的内存位置对应(这是在编译器编译的时候就已经确定好的),所以这么说来,形参确实是一个占位符(占有一个内存地址的位置);
只是调用前别的参数也可以占用这个位置,但编译器编译的时候肯定不会让一个全局变量的内存地址和分配给形参的内存地址是同一个地址,原因大家应该通过上面的解释也明白编译器在编译时不会让两个没有关联的变量,同时服务于一个地址这样会造成数据的混乱。
就像两个服务员负责同一桌客人时,当客人需要一瓶饮料时,两个服务员分别在不同时刻听到,可能就会造成给客人拿两瓶情况。
实参(实际参数)
函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。
形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。
形参和实参的区别和联系
1) 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。
4) 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。
请看下面的例子:
1 #include
2 //计算从m加到n的值
3 int sum(int m, intn)4 {5 inti;6 for (i = m+1; i <= n; ++i)7 {8 m +=i;9 }10 returnm;11 }12 intmain()13 {14 inta, b, total;15 printf("Input two numbers:");16 scanf("%d %d", &a, &b);17 total =sum(a, b);18 printf("a=%d, b=%d", a, b);19 printf("total=%d", total);20 return 0;21 }
运行结果:
Input two numbers: 1 100↙
a=1, b=100
total=5050
在这段代码中,函数定义处的 m、n 是形参,函数调用处的 a、b 是实参。通过 scanf() 可以读取用户输入的数据,并赋值给 a、b,在调用 sum() 函数时,这份数据会传递给形参 m、n。
从运行情况看,输入 a 值为 1,即实参 a 的值为 1,把这个值传递给函数 sum() 后,形参 m 的初始值也为 1,在函数执行过程中,形参 m 的值变为 5050。函数运行结束后,输出实参 a 的值仍为 1,可见实参的值不会随形参的变化而变化。
以上调用 sum() 时是将变量作为函数实参,除此以外,你也可以将常量、表达式、函数返回值作为实参,如下所示:
total = sum(10, 98); //将常量作为实参
total = sum(a+10, b-3); //将表达式作为实参
total = sum( pow(2,2), abs(-100) ); //将函数返回值作为实参
5) 形参和实参虽然可以同名,但它们之间是相互独立的,互不影响,因为实参在函数外部有效,而形参在函数内部有效。
更改上面的代码,让实参和形参同名:
1 #include
2 //计算从m加到n的值
3 int sum(int m, intn)4 {5 inti;6 for (i = m + 1; i <= n; ++i)7 {8 m +=i;9 }10 returnm;11 }12 intmain()13 {14 intm, n, total;15 printf("Input two numbers:");16 scanf("%d %d", &m, &n);17 total =sum(m, n);18 printf("m=%d, n=%d", m, n);19 printf("total=%d", total);20 return 0;21 }
运行结果:
Input two numbers: 1 100
m=1, n=100
total=5050
调用 sum() 函数后,函数内部的形参 m 的值已经发生了变化,而函数外部的实参 m 的值依然保持不变,可见它们是相互独立的两个变量,除了传递参数的一瞬间,其它时候是没有瓜葛的。
-
c语言的形参和实参传递的区别详解
2020-12-20 21:23:49C语言中实参和形参之间的数据传递是单向的“值传递”,单向传递,只能由实参传给形参,反之不行 输出格式并没有选择%p而是选择了%d,因为十进制的数看起来更直观 1 值传递 如果只是传递值的话: #include //值... -
C语言形参和实参的区别
2020-02-24 11:24:29形参(形式参数) 在函数定义中出现的参数可以看做是一个占位符,它...形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。 形参和实参的区别和联系 1 . 形参变量只有在函数被调用时才会分配内存...形参(形式参数)
在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。
实参(实际参数)
函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。
形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。
形参和实参的区别和联系
1 . 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
2 . 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
3 . 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。
4 . 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。
示例
#include <stdio.h> //计算从m加到n的值 int sum(int m, int n) { int i; for (i = m+1; i <= n; ++i) { m += i; } return m; } int main() { int a, b, total; printf("Input two numbers: "); scanf("%d %d", &a, &b); total = sum(a, b); printf("a=%d, b=%d\n", a, b); printf("total=%d\n", total); return 0; }
运行结果:
Input two numbers: 1 100↙ a=1, b=100 total=5050
在上述代码中,函数定义处的 m、n 是形参,函数调用处的 a、b 是实参。通过 scanf() 可以读取用户输入的数据,并赋值给 a、b,在调用 sum() 函数时,这份数据会传递给形参 m、n。
从运行情况看,输入 a 值为 1,即实参 a 的值为 1,把这个值传递给函数 sum() 后,形参 m 的初始值也为 1,在函数执行过程中,形参 m 的值变为 5050。函数运行结束后,输出实参 a 的值仍为 1,可见实参的值不会随形参的变化而变化。
以上调用 sum() 时是将变量作为函数实参,除此以外,你也可以将常量、表达式、函数返回值作为实参,如下所示:
total = sum(10, 98); //将常量作为实参 total = sum(a+10, b-3); //将表达式作为实参 total = sum( pow(2,2), abs(-100) ); //将函数返回值作为实参
5 . 形参和实参虽然可以同名,但它们之间是相互独立的,互不影响,因为实参在函数外部有效,而形参在函数内部有效。
示例实参和形参同名:
#include <stdio.h> //计算从m加到n的值 int sum(int m, int n) { int i; for (i = m + 1; i <= n; ++i) { m += i; } return m; } int main() { int m, n, total; printf("Input two numbers: "); scanf("%d %d", &m, &n); total = sum(m, n); printf("m=%d, n=%d\n", m, n); printf("total=%d\n", total); return 0; }
运行结果:
Input two numbers: 1 100 m=1, n=100 total=5050
调用 sum() 函数后,函数内部的形参 m 的值已经发生了变化,而函数外部的实参 m 的值依然保持不变,可见它们是相互独立的两个变量,除了传递参数的一瞬间,其它时候是没有瓜葛的。
如果感觉不错的话请点赞哟!!!
-
c语言形参与实参的区别
2022-03-12 16:08:09为什么x1x2会改变呢它不是调用的实参不返回吗难道是因为全局变量的问题吗 -
C语言形参跟实参详解
2019-01-29 15:27:56今天我们来说下c语言形参与实参的区别,形参跟实参理解的话也很简单,但是好多同学关于这个知识点都是一知半解,没有真正的去透彻,在真正引用的时候还会出现很多问题,而百度的时候又会说看不懂,所以我们今天来做...形参与实参
今天我们来说下c语言形参与实参的区别,形参跟实参理解的话也很简单,但是好多同学关于这个知识点都是一知半解,没有真正的去透彻,一问都知道,但在真正引用的时候还会出现很多问题,而百度的时候又会说看不懂,所以我们今天来做一个比较全面的介绍
我们今天讲解以简单明了易看懂为基础
1.形参和实参是什么
简单来说,形式参数(形参)就是形式上的参数,没有确定值,
而实际参数(实参)是实际存在的,已经确定的参数,常量,变量,表达式,都是实参,最简单的例子
int a=2; 这里的A有了实际的值 为实参 int change(int b,int c); **c和b就是形参**。 这里的c和b可以是任意一个值传递,为形参 int main() { change(1,2); 这样就是把实参值传递给形参,1和2就是实参 }
这样我们能有一个简单的认识
2.形参和实参的区别
形参 实参 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量 实参定义后就会分配内存 形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用 实参出现在主调函数中,进入被调函数后,实参变量也不能使用 形参没有确定的值 实参在值传递给形参的时候,必须要有确定的数值 3.形参与实参知识点
3.1实参的值不随形参的变化而变化
在C语言中,数据传送是单向的,即只能把实参的值值传递给形参,但形参的变化不会改变实参的值,我们可以简单理解,就相当于把实参的值 复制给了另一个数(形参),而另一个数的改变不会改变原来数(实参)的值,正规来说:他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。。
** 3.2.实参传递给形参的参数个数类型和顺序都应相同,否则会系统强制转换,出现数据丢失或者“类型不匹配”的错误
比如float a=5.34; void number(int b); int main() { number(a); //这样就会出现丢精度现象 }
3.3如果实参是数组名,那么形参传递的之就是地址的值
int a[5]; void add(int *b); int main() { add(a);//这样就是把数组a的首地址做为形参传递 }
在C里面 是无法做到形参改变 实参值同步改变的。如果要用函数改变实参的值,可以用指针作为参数来改变
通过直接改变地址存储值来改变实参 -
C语言之形参和实参详解
2021-05-21 16:06:52就是定义函数的时候,写在函数名小括号后面的参数叫形参实参:实际参数。就是调用函数的时候,调用函数时写在函数名小括号后面的参数就叫实参2).注意项a.实参既可以放常量,也可以放变量,还可以放表达式;形参:它... -
C语言——形参和实参的值变换问题(立体空间)
2021-05-21 08:37:08在C语言中关于形参和实参的传递分为两种:值传递和地址传递。地址传递又分为:参数为指针变量,参数为引用类型,参数为数组名。我们可以这样想实参的传递过程:将主函数中所有参数(包括要调用的实参)作为地面上的... -
c语言的形参和实参传递的区别
2019-02-28 10:52:49参数传递,是在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程。参数传递有3种方式: 值传递 地址传递 引用传递 tips: 被调用函数的形参只有函数被调用时... -
C语言中函数形参与实参的区别
2021-10-02 22:56:10众所周知一个函数有两种参数,即形参和实参。那么究竟什么是形参什么是实参呢? 形参:在定义函数时指定的参数,在未出现函数调用时,他们并不占用内存中的存储...在c语言中,实参与形参的数据传递是“值传递”,单... -
C语言_形参和实参的区别
2022-06-18 10:04:53嵌入式软件开发指南(C语言) -
C语言形参与实参的概念及swap函数
2021-05-21 13:58:21形式参数(formal argument)和实际参数(actual argument)是什么?void function(int n); //n为形式参数int main{int times=5;function(times); //times为实际参数}void function(int n){for(int i=0;iprintf("hello\n... -
C语言形参和实参问题
2020-12-29 11:31:09形参:函数被调用时接收实参的参数,是一个变量。 用两个例子来解释: example1: #include <stdio.h> int function(int a,int b) //函数定义 { a++; b++; return 0; } int main(int argc, char *argv[]) {... -
C语言函数-形参和实参
2019-04-29 09:34:341.形参和实参的概念 形参(也叫形式参数) 在定义函数名和函数体的时候使用的参数,他没有数据,可以看做一个占位符,只能等到函数被调用时接收传递进来的数据,所以称为形式参数; 实参(也叫实际参数) 在调用时传递给... -
c语言中形参与实参的关系
2018-04-11 16:10:48一、形参出现在函数定义中,在整个函数体内都可以使用,形参变量只有在被调用时才分配内存单元,在调用...二、形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主... -
形参和实参之间的三种传递方式
2021-05-24 07:03:51//形参和实参之间的三种传递方式void fun(int i){ i++;}void fun(int &i){ i++;}void fun(int *i){ *i=*i+1;}若指针指向的是数组的首地址,则数组元素的访问方式1.数组名[i] 指针名[i]2.*(数组名+i) *(指针名+i)... -
C语言形参和实参的陷阱
2021-05-25 03:45:24的结果之所以不变,是因为实参向对形参的数据传递是“值传递”,单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参... -
c语言形参实参调用说明
2021-04-09 12:18:05前言:刚学习C语言的时候,基础没打扎实,落下了大大小小的漏洞,因此对一些自己曾经记错的知识点分享给大家。 1.对于传参的理解 void f(int b){ b=b/2; return b; } int main(){ int a=0; scanf("%d",&a)... -
形参和实参的储存单元是否一致?
2021-11-27 11:21:40实参和形参是各占独立存储空问,函数调用过程中,实参向形参拷贝复制值。实参是个变量,形参 也是个变量。如果占用同一片空间的话,编译时候就不存在实参形参类型不匹配的报错参数传递中,形参值的改变不影响实参的... -
【C语言】关于函数中形参与实参(实例分析)
2022-02-06 15:28:38作者目前就读于,双非本科,大一,很多地方理解不当还望各位大佬耐心教导。万分感谢! 现在也是大年初六,在这给大家们拜一个...3.无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值, 以便...